Skip to content

Commit

Permalink
Adding support for double 2D arrays (#404)
Browse files Browse the repository at this point in the history
* Fixing client serialization issues around sparse enums and oneof fields. Also fixed an issue where we sometimes were serializing the selected_index field across the wire which would end up getting captured in the unknown fields.

* Adding support for "well known types" the first of which is Double2DArray.

* Attempting to fix RT Linux build by reverting back to older runner image.

* - Updating VIPM package versions to 1.3
- Fixing offset to data pointer for 2D arrays when copying data
- Correct spelling for type name

* - Protect against buffer overwrite
- Assert array element size meets expectations
- Use std::unique_ptr to avoid memory leak

* Fix MessageElementMetadata reference so it is const rather than the std::shared_ptr reference.

* Fixing Copy to cluster methods so constness is applied to LVMessageValue and not shared_ptr.

* Fix Linux build.

* More const fixes to avoid need for temporary variables.

* Reverting vipb changes to try and fix VIPM build.
  • Loading branch information
jasonmreding authored Jan 31, 2025
1 parent 02951e0 commit 8dd23a6
Show file tree
Hide file tree
Showing 74 changed files with 702 additions and 285 deletions.
22 changes: 11 additions & 11 deletions .github/workflows/build_on_rt.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ env:
jobs:
build-nilrt:
name: NILRT Cross Compile with GCC 6.3.0
runs-on: ubuntu-latest
runs-on: ubuntu-22.04

steps:
- name: Checkout Repo
Expand All @@ -30,13 +30,13 @@ jobs:
sudo chmod a+x ./oecore-x86_64-core2-64-toolchain-6.0.sh
sudo ./oecore-x86_64-core2-64-toolchain-6.0.sh -y -d ${GITHUB_WORKSPACE}/nilrt-toolchain/
echo "${GITHUB_WORKSPACE}/nilrt-toolchain/sysroots/x86_64-nilrtsdk-linux/usr/bin/x86_64-nilrt-linux" >> ${GITHUB_PATH}
- name: Update Submodules
id: submodules
run: |
git submodule update --init --recursive
echo "::set-output name=grpc-commit::$(git rev-parse --short @:./third_party/grpc)"
- name: Cache Host OS gRPC Support
uses: actions/cache@v4
id: hostgrpccache
Expand All @@ -63,7 +63,7 @@ jobs:
if (NOT result EQUAL 0)
message(FATAL_ERROR "Bad exit status")
endif()
- name: Build Host OS gRPC Support
if: steps.hostgrpccache.outputs.cache-hit != 'true'
shell: cmake -P {0}
Expand All @@ -81,7 +81,7 @@ jobs:
message("::error::${error_message}")
message(FATAL_ERROR "Build failed")
endif()
- name: Install Host OS gRPC Support
run: sudo cmake --install ${GITHUB_WORKSPACE}/third_party/grpc/build

Expand All @@ -101,7 +101,7 @@ jobs:
if (NOT result EQUAL 0)
message(FATAL_ERROR "Bad exit status")
endif()
- name: Cross Compile
shell: cmake -P {0}
run: |
Expand All @@ -123,29 +123,29 @@ jobs:
name: Print CMakeTests logs
run: |
folder="${{runner.workspace}}/grpc-labview/tests/CMakeTests/logs/"
# Check if the folder exists
if [ ! -d "$folder" ]; then
echo "CMakeTests log folder (grpc-labview/tests/CmakeTests/logs) does not exist."
echo "Exiting the script."
exit
fi
# Change to the folder
cd "$folder" || exit
# Iterate through files and print their contents
for file in *; do
if [ -f "$file" ]; then
cat "$file"
echo
fi
done
- name: Tar Build Artifacts
run: >-
tar -czvf liblabview-grpc-server-rt.tar.gz -C ${GITHUB_WORKSPACE}/build liblabview_grpc_server.so
- name: Upload Build Artifacts
uses: actions/upload-artifact@v4
with:
Expand Down
2 changes: 2 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,9 @@ add_library(labview_grpc_server SHARED
src/lv_proto_server_reflection_plugin.cc
src/lv_proto_server_reflection_service.cc
src/message_element_metadata_owner.cc
src/message_metadata.cc
src/unpacked_fields.cc
src/well_known_types.cc
)
target_link_libraries(labview_grpc_server
${_REFLECTION}
Expand Down
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

Large diffs are not rendered by default.

Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -121,19 +121,18 @@
<Item Name="Get Constant.vi" Type="VI" URL="../Oneof API/OneOf Constants/Get Constant.vi"/>
<Item Name="OneOfConstantsEnum.ctl" Type="VI" URL="../Oneof API/OneOf Constants/OneOfConstantsEnum.ctl"/>
</Item>
<Item Name="Add Oneof Index To Metadata.vi" Type="VI" URL="../Oneof API/Add Oneof Index To Metadata.vi"/>
<Item Name="Add Oneof Indices To Metadata.vi" Type="VI" URL="../Oneof API/Add Oneof Indices To Metadata.vi"/>
<Item Name="Copy PDC To VI.vi" Type="VI" URL="../Oneof API/Copy PDC To VI.vi"/>
<Item Name="Create LVClass for Oneof.vi" Type="VI" URL="../Oneof API/Create LVClass for Oneof.vi"/>
<Item Name="Create OneOf Accessors.vi" Type="VI" URL="../Oneof API/Create OneOf Accessors.vi"/>
<Item Name="Create Oneof Case Structure.vi" Type="VI" URL="../Oneof API/Create Oneof Case Structure.vi"/>
<Item Name="Create Oneof Class Converter.vi" Type="VI" URL="../Oneof API/Create Oneof Class Converter.vi"/>
<Item Name="Create OneOf Field Accessors.vi" Type="VI" URL="../Oneof API/Create OneOf Field Accessors.vi"/>
<Item Name="Create Oneof Message Converter Skeletons.vi" Type="VI" URL="../Oneof API/Create Oneof Message Converter Skeletons.vi"/>
<Item Name="Create Oneof Message Converters (Flat to Rich).vi" Type="VI" URL="../Oneof API/Create Oneof Message Converters (Flat to Rich).vi"/>
<Item Name="Create Oneof Message Converters (Rich to Flat).vi" Type="VI" URL="../Oneof API/Create Oneof Message Converters (Rich to Flat).vi"/>
<Item Name="Create Oneof Message Converters.vi" Type="VI" URL="../Oneof API/Create Oneof Message Converters.vi"/>
<Item Name="Create Oneof Protobuf To Field Name.vi" Type="VI" URL="../Oneof API/Create Oneof Protobuf To Field Name.vi"/>
<Item Name="Create Selected Index Numeric In Cluster.vi" Type="VI" URL="../Oneof API/Create Selected Index Numeric In Cluster.vi"/>
<Item Name="Create VI From Template For Oneof Class.vi" Type="VI" URL="../Oneof API/Create VI From Template For Oneof Class.vi"/>
<Item Name="Delete Oneof Template Files.vi" Type="VI" URL="../Oneof API/Delete Oneof Template Files.vi"/>
<Item Name="Drop Oneof Constant into Case Structure Default.vi" Type="VI" URL="../Oneof API/Drop Oneof Constant into Case Structure Default.vi"/>
<Item Name="Drop Protobuf To Field Converter SubVI.vi" Type="VI" URL="../Oneof API/Drop Protobuf To Field Converter SubVI.vi"/>
Expand All @@ -142,12 +141,15 @@
<Item Name="Get Rich to Flat Info.vi" Type="VI" URL="../Oneof API/Get Rich to Flat Info.vi"/>
<Item Name="Get Selected Index Terminal from Unbundler (by oneof name).vi" Type="VI" URL="../Oneof API/Get Selected Index Terminal from Unbundler (by oneof name).vi"/>
<Item Name="Get Typedef Name.vi" Type="VI" URL="../Oneof API/Get Typedef Name.vi"/>
<Item Name="Script Rich to Flat Conversion.vi" Type="VI" URL="../Oneof API/Script Rich to Flat Conversion.vi"/>
<Item Name="Script Field Conversion.vi" Type="VI" URL="../Oneof API/Script Field Conversion.vi"/>
<Item Name="Script Flat to Rich Message Conversion.vi" Type="VI" URL="../Oneof API/Script Flat to Rich Message Conversion.vi"/>
<Item Name="Script Flat to Rich Oneof Conversion.vi" Type="VI" URL="../Oneof API/Script Flat to Rich Oneof Conversion.vi"/>
<Item Name="Script Rich to Flat Message Conversion.vi" Type="VI" URL="../Oneof API/Script Rich to Flat Message Conversion.vi"/>
<Item Name="Script Rich to Flat Oneof Conversion.vi" Type="VI" URL="../Oneof API/Script Rich to Flat Oneof Conversion.vi"/>
<Item Name="ScriptOneofClassConverter.vi" Type="VI" URL="../Oneof API/ScriptOneofClassConverter.vi"/>
<Item Name="Set LVClass Const Label.vi" Type="VI" URL="../Oneof API/Set LVClass Const Label.vi"/>
<Item Name="Set LVClass Control Label.vi" Type="VI" URL="../Oneof API/Set LVClass Control Label.vi"/>
<Item Name="Update OneOf Field Accessor.vi" Type="VI" URL="../Oneof API/Update OneOf Field Accessor.vi"/>
<Item Name="Wire Between Unbundle And Bundle For Message Converter With Oneof.vi" Type="VI" URL="../Oneof API/Wire Between Unbundle And Bundle For Message Converter With Oneof.vi"/>
<Item Name="Wire Selected_Index To Case Selector.vi" Type="VI" URL="../Oneof API/Wire Selected_Index To Case Selector.vi"/>
</Item>
<Item Name="Project API" Type="Folder">
Expand Down Expand Up @@ -233,7 +235,6 @@
<Item Name="Populate gRPC Events.vi" Type="VI" URL="../Top Level API/Populate gRPC Events.vi"/>
</Item>
<Item Name="RPC Messages" Type="Folder">
<Item Name="Check Message Data Clusters.vi" Type="VI" URL="../Top Level API/Check Message Data Clusters.vi"/>
<Item Name="Create Enum Accessor.vi" Type="VI" URL="../Top Level API/Create Enum Accessor.vi"/>
<Item Name="Create Enum Data Clusters (simple).vi" Type="VI" URL="../Top Level API/Create Enum Data Clusters (simple).vi"/>
<Item Name="Create Enum Data Clusters.vi" Type="VI" URL="../Top Level API/Create Enum Data Clusters.vi"/>
Expand Down Expand Up @@ -265,8 +266,11 @@
<Item Name="Get LV Object Indicators for Proto Field Type.vi" Type="VI" URL="../Top Level API/Get LV Object Indicators for Proto Field Type.vi"/>
<Item Name="Get Message Placement Cluster.vi" Type="VI" URL="../Top Level API/Get Message Placement Cluster.vi"/>
<Item Name="Get Or Create Typedef.vi" Type="VI" URL="../Top Level API/Get Or Create Typedef.vi"/>
<Item Name="Is Element Conversion Required.vi" Type="VI" URL="../Top Level API/Is Element Conversion Required.vi"/>
<Item Name="Is Element Well Known Type.vi" Type="VI" URL="../Top Level API/Is Element Well Known Type.vi"/>
<Item Name="Set Enum Control Strings.vi" Type="VI" URL="../Top Level API/Set Enum Control Strings.vi"/>
<Item Name="Set Message Field Representation.vi" Type="VI" URL="../Top Level API/Set Message Field Representation.vi"/>
<Item Name="Update Control for Element.vi" Type="VI" URL="../Top Level API/Update Control for Element.vi"/>
<Item Name="Update Enum Getter.vi" Type="VI" URL="../Top Level API/Update Enum Getter.vi"/>
<Item Name="Update Enum Mapper.vi" Type="VI" URL="../Top Level API/Update Enum Mapper.vi"/>
<Item Name="Update Enum Setter.vi" Type="VI" URL="../Top Level API/Update Enum Setter.vi"/>
Expand Down
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
11 changes: 8 additions & 3 deletions labview source/gRPC lv Support/grpc-lvsupport.lvlib
Original file line number Diff line number Diff line change
Expand Up @@ -67,12 +67,13 @@
<Item Name="Get Embedded Message Name.vi" Type="VI" URL="../Server API/Cluster to gRPC message/Get Embedded Message Name.vi">
<Property Name="NI.LibItem.Scope" Type="Int">2</Property>
</Item>
<Item Name="LabVIEW DataType to Message Element DataType.vi" Type="VI" URL="../Server API/Cluster to gRPC message/LabVIEW DataType to Message Element DataType.vi">
<Item Name="LabVIEW Data Value to Message Element DataType.vi" Type="VI" URL="../Server API/Cluster to gRPC message/LabVIEW Data Value to Message Element DataType.vi">
<Property Name="NI.LibItem.Scope" Type="Int">2</Property>
</Item>
<Item Name="Element to Enum Metadata.vi" Type="VI" URL="../Server API/Cluster to gRPC message/Element to Enum Metadata.vi">
<Property Name="NI.LibItem.Scope" Type="Int">2</Property>
</Item>
<Item Name="Element to Message Element Metadata.vi" Type="VI" URL="../Server API/Cluster to gRPC message/Element to Message Element Metadata.vi"/>
</Item>
<Item Name="Message Requests" Type="Folder">
<Item Name="Complete Call.vi" Type="VI" URL="../Server API/Message Requests/Complete Call.vi"/>
Expand Down Expand Up @@ -103,11 +104,15 @@
</Item>
</Item>
<Item Name="Shared" Type="Folder">
<Item Name="grpcId.ctl" Type="VI" URL="../Shared/grpcId.ctl"/>
<Item Name="Any.ctl" Type="VI" URL="../Shared/Any.ctl"/>
<Item Name="grpcId.ctl" Type="VI" URL="../Shared/grpcId.ctl"/>
<Item Name="Well Known Types.ctl" Type="VI" URL="../Shared/Well Known Types.ctl"/>
<Item Name="Is Message Well Known Type.vi" Type="VI" URL="../Shared/Is Message Well Known Type.vi"/>
<Item Name="Set LVRT Module Path.vi" Type="VI" URL="../Shared/Set LVRT Module Path.vi"/>
<Item Name="Wait On Occurence.vi" Type="VI" URL="../Shared/Wait On Occurence.vi"/>
<Item Name="To Message Name.vi" Type="VI" URL="../Shared/To Message Name.vi"/>
<Item Name="To Well Known Type.vi" Type="VI" URL="../Shared/To Well Known Type.vi"/>
<Item Name="TranslateGrpcError.vi" Type="VI" URL="../Shared/TranslateGrpcError.vi"/>
<Item Name="Wait On Occurence.vi" Type="VI" URL="../Shared/Wait On Occurence.vi"/>
<Item Name="Wait On Occurrence Wrapper.vi" Type="VI" URL="../Shared/Wait On Occurrence Wrapper.vi"/>
</Item>
</Library>
Loading

0 comments on commit 8dd23a6

Please sign in to comment.