### Install Go Samples Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/README.md Installs the necessary environment for building Go sample projects. This script is part of the SDK's setup process. ```bash install-go.sh ``` -------------------------------- ### start() Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/api/python/functions_func_s.html Starts the provider or system. This method is available in both the Provider and System classes. ```APIDOC ## start() ### Description Initiates the operation of a Provider or the entire System. This is typically called to bring the component online and make it ready for use. ### Method Not applicable (SDK method) ### Endpoint Not applicable (SDK method) ### Parameters None explicitly listed in source. ### Request Example ```python # Example usage for Provider (assuming 'provider_obj' is an instance of Provider) provider_obj.start() # Example usage for System (assuming 'system_obj' is an instance of System) system_obj.start() ``` ### Response * **Provider/System** - The return type is not specified in the source, but it likely indicates success or failure of the start operation. ``` -------------------------------- ### Install Prerequisites for SDK Scripts Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/README.md Installs essential packages required for executing SDK scripts on Ubuntu-based systems. Ensure these are installed before proceeding with SDK setup. ```bash sudo apt-get update sudo apt-get install -y \ zip \ unzip \ p7zip-full \ git \ apt-transport-https \ whois \ net-tools \ pkg-config \ jq \ sshpass \ dpkg-dev ``` -------------------------------- ### Install QEMU and KVM on Linux Host Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/setup_qemu_ubuntu.md This script installs QEMU and KVM on a Linux host system. It is assumed that the ctrlX AUTOMATION SDK is installed in the ~/ctrlx-automation-sdk directory. ```bash ~/ctrlx-automation-sdk/scripts/environment/install-qemu.sh ``` -------------------------------- ### Build, Upload, and Log Snap Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/samples.md Automates the creation, upload, installation, and log viewing of a snap on a ctrlX CORE. Can be started from the command line or Visual Studio Code. ```shell ../../scripts/build-upload-log-snap.sh -help ``` ```shell ../../scripts/build-upload-log-snap.sh -NA ``` -------------------------------- ### start Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/api/java/com/boschrexroth/api/DlSystem.html Starts the datalayer system. Optionally starts an internal broker if `boStartBroker` is true. ```APIDOC ## start ### Description Starts a dalayer system. ### Method Instance Method ### Parameters #### Path Parameters - **boStartBroker** (boolean) - Required - Use true to start a broker. If you are a user of the datalayer - call with false! ``` -------------------------------- ### Start Px Proxy Server Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/px.md This batch script navigates to the px installation directory and starts the px.exe proxy server. It's intended for manual execution or as a target for a startup shortcut. ```batch cd c:\tools\px px.exe ``` -------------------------------- ### Start Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/api/net/html/classDatalayer_1_1DatalayerSystem.html Starts the DatalayerSystem. Optionally, it can also start the broker. ```APIDOC ## Start(bool startBroker = false) ### Description Starts the DatalayerSystem. If `startBroker` is true, the broker will also be started. ### Method void ### Parameters * **startBroker** (bool) - Optional. If true, starts the Datalayer broker. ``` -------------------------------- ### Install Node.js NPM Samples Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/README.md Installs Node.js and npm, which are required for building Node.js sample projects. Execute this script from the SDK's scripts directory. ```bash install-nodejs-npm.sh ``` -------------------------------- ### Start Method Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/api/net/html/classDatalayer_1_1DatalayerSystem.html Starts the DatalayerSystem. Optionally starts a broker. Users of the ctrlX Data Layer should set startBroker to false. ```APIDOC ## Start(bool _startBroker_ = false) ### Description Starts the DatalayerSystem. ### Parameters * **_startBroker_** (bool) - Use true to start a broker. If you are a user of the ctrlX Data Layer, set to false. ### Exceptions * **ObjectDisposedException** - Cannot access a disposed object. ### Example ```csharp using var system = new DatalayerSystem(); system.Start(startBroker: false); ``` ``` -------------------------------- ### List Installed .NET SDKs Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/dotnet.md Verifies the installed .NET SDK versions and their paths on the QEMU VM. ```bash dotnet --list-sdks ``` -------------------------------- ### Client Creation and Usage Example Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/api/java/com/boschrexroth/api/Client.html This example demonstrates the basic pattern for creating and using a Client instance within a try-with-resources block. It shows how to obtain a Client from a DlSystem factory. ```Java try (com.boschrexroth.api.DlSystem s = com.boschrexroth.api.DlSystem.create("")) { ... try(Client c = s.Factory().createClient(" ... ")) { } ... } ... ``` -------------------------------- ### Install QEMU and KVM Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/scripts/environment/README.md This script installs necessary QEMU and KVM packages on your host system. Ensure your host has internet access before running. ```bash install-qemu.sh ``` -------------------------------- ### Install .NET SDK Samples Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/README.md Installs the .NET SDK required for building .NET sample projects. This script is located within the SDK's scripts directory. ```bash install-dotnet-sdk.sh ``` -------------------------------- ### Get Schema Example Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/api/java/com/boschrexroth/api/Converter.html Demonstrates how to retrieve schema information using the getSchema method. It shows the usage within a try-with-resources block for managing DlSystem resources. ```java try (com.boschrexroth.api.DlSystem s = com.boschrexroth.api.DlSystem.create("")) { Converter c = s.JSONConverter(); byte[] m = c.getSchema(Schema.MEMORY); ... } ... ``` -------------------------------- ### Datalayer.DatalayerSystem.Start Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/api/net/html/DatalayerSystem_8cs_source.html Starts the DatalayerSystem. Optionally starts the broker. ```APIDOC ## Datalayer.DatalayerSystem.Start ### Description Starts the DatalayerSystem. Optionally starts the broker. ### Method void ### Parameters #### Path Parameters None #### Query Parameters None #### Request Body None ### Request Example None ### Response #### Success Response (void) None #### Response Example None ``` -------------------------------- ### Install App on ctrlX Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/samples-net/datalayer.provider.simple/README.md Instructions for installing the application on a ctrlX device. This involves logging into the ctrlX interface and navigating to the Apps section. ```text Login into ctrlX and install the App (Apps). ``` -------------------------------- ### start Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/api/python/provider_8py_source.html Starts the provider service. ```APIDOC ## start ### Description Starts the provider. This action initiates the connection and operational state of the provider. ### Method Provider.start ### Definition [provider.py:104](provider_8py_source.html#l00104) ``` -------------------------------- ### Start Datalayer System Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/api/python/system_8py_source.html Starts the datalayer system. Optionally starts the broker. ```python ctrlxdatalayer.clib.libcomm_datalayer.DLR_systemStart(self.__system, bool_start_broker) ``` -------------------------------- ### Full Example .signature File Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/appsigning-oem.md A complete example of a .signature file, including app-revision and app-privileges sections. This file is appended to the .signature file. ```yaml type: app-revision app-name: mockcorp-my-app publisher: com.ctrlx-automation.app.mockcorp organization: Mockcorp Limited timestamp: 2024-11-18T08:15:04Z snap-digest: 52a33b17a7e578a553d46a2bb4f3ce549f15ad06742580dcba2eea138f122eae3255d4842f8ea597a3cab72b9a301791 MEYCIQCNrOfqwizQtTm+UVwx2Q4Ee5uHiMMzQYnmOhNMoODYfwIhAJGloXM7lifS vj1TVgv6DDaIAPuDCwhnKsrS3uuHSByN type: app-privileges app-name: mockcorp-my-app publisher: com.ctrlx-automation.app.mockcorp timestamp: 2024-11-18T08:15:04Z plugs: firewall-control: loop-devices: interface: custom-device custom-device: loop-devices slots: loop-devices-slot: interface: custom-device custom-device: loop-devices devices: - /dev/loop[0-9] - /dev/loop[1-9][0-9] files: read: - /proc/devices MEYCIQCNrOfqwizQtTm+UVwx2Q4Ee5uHiMMzQYnmOhNMoODYfwIhAJGloXM7lifS vj1TVgv6DDaIAPuDCwhnKsrS3uuHSByN ``` -------------------------------- ### App Start Script for Mounting Storage Extension Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/storage-extension.md This bash script demonstrates how to mount the storage extension in an application's start script. It first checks if the storage extension is available and then mounts it before starting the main application. ```bash #!/usr/bin/env bash # check if storage extension is ready to use (prepared by Device Admin) mount | grep /var/snap/rexroth-deviceadmin/common/storage-extension if [ $? -ne 0 ]; then # No storage extension detected - abort script echo No storage extension found exit 1 fi # storage extension detected, mount for your app snapctl mount -o rw,bind /writable/system-data/var/run/mnt/storage-extension/$SNAP_NAME $SNAP_COMMON/storage-extension/$SNAP_NAME $SNAP/your-app.sh ``` -------------------------------- ### Console Output Example Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/samples-net/hello.globalization/README.md This is an example of the expected console output from the hello.globalization application. ```bash Hello World! 11.03.2021 09:45:05 Hello World! 11.03.2021 09:45:06 Hello World! 11.03.2021 09:45:07 Hello World! 11.03.2021 09:45:08 ``` -------------------------------- ### Install .NET SDK on QEMU VM Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/dotnet.md Installs the .NET SDK as a snap package on a QEMU virtual machine. Ensure you are logged into the VM via SSH. ```bash ssh -p 10022 boschrexroth@localhost ./install-dotnet-sdk.sh ``` -------------------------------- ### Start Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/api/net/html/interfaceDatalayer_1_1IProvider-members.html Starts the data layer provider. ```APIDOC ## Start ### Description Starts the data layer provider. ### Method (Not specified, likely a method call within the .NET API) ### Parameters None ``` -------------------------------- ### List Installed .NET Runtimes Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/dotnet.md Checks the installed .NET runtime versions on the QEMU VM. ```bash dotnet --list-runtimes ``` -------------------------------- ### Install Dependencies Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/samples-node/datalayer.provider.simple/README.md Run this command to install the necessary Node.js dependencies for the project. ```bash npm install ``` -------------------------------- ### Start Datalayer System Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/api/python/system_8py_source.html Starts the datalayer system. Set 'bo_start_broker' to true to start a broker; users of the datalayer should call with false. ```python def start(self, bo_start_broker: bool): ctrlxdatalayer.clib.libcomm_datalayer.DLR_systemStart(self.__system, bo_start_broker) ``` -------------------------------- ### Install Target Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/samples-cpp/datalayer.provider.sub/src/client/CMakeLists.txt Specifies the installation rules for the 'client' target, defining runtime, library, and archive destinations. ```cmake install( TARGETS client RUNTIME DESTINATION ${CMAKE_SOURCE_DIR}/generated/${PLATFORM_NAME}/${CMAKE_BUILD_TYPE} LIBRARY DESTINATION ${CMAKE_SOURCE_DIR}/generated/${PLATFORM_NAME}/${CMAKE_BUILD_TYPE} ARCHIVE DESTINATION ${CMAKE_SOURCE_DIR}/generated/${PLATFORM_NAME}/${CMAKE_BUILD_TYPE} COMPONENT ${BUNDLE_PROJECT_NAME} ) ``` -------------------------------- ### Start Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/api/net/html/interfaceDatalayer_1_1IProvider.html Starts the IProvider, enabling it to communicate with the ctrlX Data Layer. This should be called after initialization and before any other operations. ```APIDOC ## Start ### Description Starts the IProvider, enabling it to communicate with the ctrlX Data Layer. This should be called after initialization and before any other operations. ### Method [Method Signature] ### Parameters #### Path Parameters - None #### Query Parameters - None #### Request Body - None ### Request Example ```csharp // Example usage (conceptual) Datalayer.IProvider provider = ...; provider.Start(); ``` ### Response #### Success Response - **DLR_RESULT** (Datalayer.DLR_RESULT) - Indicates the result of starting the provider. #### Response Example ```csharp // Conceptual response handling Datalayer.DLR_RESULT result = provider.Start(); if (result == Datalayer.DLR_RESULT.Ok) { // Provider started successfully } ``` ``` -------------------------------- ### Install Standard Development Packages Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/setup_windows_virtualbox_ubuntu.md Install essential development packages such as zip and unzip. This command installs the specified packages, ensuring they are available for development tasks. ```bash sudo apt-get install -y zip unzip ... ``` -------------------------------- ### Install Java Gradle Samples Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/README.md Installs the Java Development Kit (JDK) and Gradle, necessary for building Java sample projects. This script is found in the SDK's scripts directory. ```bash install-java-gradle.sh ``` -------------------------------- ### Install Target for SNAP Build Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/samples-cpp/scheduler.remote/src/CMakeLists.txt Configures installation rules for the target when building for a SNAP environment. ```cmake install( TARGETS ${TARGET_PROJECT_NAME_CLIENT} CONFIGURATIONS ${CMAKE_BUILD_TYPE} RUNTIME DESTINATION ${CMAKE_SOURCE_DIR}/generated/build LIBRARY DESTINATION ${CMAKE_SOURCE_DIR}/generated/build ARCHIVE DESTINATION ${CMAKE_SOURCE_DIR}/generated/build ) ``` -------------------------------- ### Post-Build Command for Installation Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/samples-cpp/datalayer.client.sub/CMakeLists.txt Adds a custom command to execute after the target is built. It invokes 'make install' to perform the installation steps defined earlier. ```cmake add_custom_command(TARGET ${TARGET_PROJECT_NAME} POST_BUILD COMMAND make install ) ``` -------------------------------- ### Install Java and Gradle Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/samples-java/README.md Installs the necessary Java JDK LTS and Gradle build tool using a provided script. Ensure you are in the correct directory before execution. ```bash cd ctrlx-automation-sdk/scripts ./install-java-gradle.sh ``` -------------------------------- ### FOSS Information File Example (fossinfo.json) Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/package-assets.md Example structure for the fossinfo.json file, which lists all open source software components, their versions, licenses, and copyright holders. ```json { "project": { "name": "YourProjectName", "version": "1.0.0", "description": "A brief description of your project.", "homepage": "https://yourprojecthomepage.example.com" }, "foss_components": [ { "name": "ComponentName", "version": "ComponentVersion", "license": "LicenseType", "license_url": "https://opensource.org/licenses/LicenseType", "source_url": "https://repository.url/ComponentName", "copyright": "Copyright (c) Year Author/Organization", "notice": "Any additional notices or attributions required by the license." }, { "name": "AnotherComponent", "version": "2.3.4", "license": "MIT", "license_url": "https://opensource.org/licenses/MIT", "source_url": "https://github.com/example/AnotherComponent", "copyright": "Copyright (c) 2022 Example", "notice": "" } // Add more components as needed ], "generated_at": "2024-06-13T12:00:00Z" } ``` -------------------------------- ### Install Target for Standard Build Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/samples-cpp/scheduler.remote/src/CMakeLists.txt Configures installation rules for the target in a standard build environment. ```cmake install(TARGETS ${TARGET_PROJECT_NAME_CLIENT} CONFIGURATIONS ${CMAKE_BUILD_TYPE} ARCHIVE DESTINATION ${CMAKE_SOURCE_DIR}/generated/${PLATFORM_NAME}/${CMAKE_BUILD_TYPE} RUNTIME DESTINATION ${CMAKE_SOURCE_DIR}/generated/${PLATFORM_NAME}/${CMAKE_BUILD_TYPE} LIBRARY DESTINATION ${CMAKE_SOURCE_DIR}/generated/${PLATFORM_NAME}/${CMAKE_BUILD_TYPE} ) ``` -------------------------------- ### Install Provider Target Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/samples-cpp/datalayer.provider.sub/src/provider/CMakeLists.txt Specifies the installation paths and component for the provider executable and libraries. ```cmake install( TARGETS provider RUNTIME DESTINATION ${CMAKE_SOURCE_DIR}/generated/${PLATFORM_NAME}/${CMAKE_BUILD_TYPE} LIBRARY DESTINATION ${CMAKE_SOURCE_DIR}/generated/${PLATFORM_NAME}/${CMAKE_BUILD_TYPE} ARCHIVE DESTINATION ${CMAKE_SOURCE_DIR}/generated/${PLATFORM_NAME}/${CMAKE_BUILD_TYPE} COMPONENT ${BUNDLE_PROJECT_NAME} ) ``` -------------------------------- ### RemoteBuilder Usage Examples Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/api/java/com/boschrexroth/api/RemoteBuilder.html Examples demonstrating how to use the RemoteBuilder to create connection strings for different scenarios. ```APIDOC ## RemoteBuilder Usage Examples This section provides examples of how to use the `RemoteBuilder` to construct connection strings for ctrlX CORE devices. ### Example 1: Custom IP, User, and Password ```java String connection = RemoteBuilder.create().Ip("192.168.1.100").User("admin").Password("-$_U/{X$aG}Z3/e<\"").build(); ``` ### Example 2: Connecting to ctrlX COREvirtual with Port Forwarding ```java String connection = RemoteBuilder.create().IpVirtual().PortVirtual().build(); ``` **Remarks:** - `10.0.2.2` is the IP address of the host from the point of view of the app build environment (QEMU VM). - `8443` is the host port which is forwarded to the SSL port (=433) of the ctrlX COREvirtual. ### Example 3: Default Connection String Format The default TCP connection string format is: ``` tcp://{user}:{password}@{ip}?sslport={sslPort} ``` With default values: - ip="192.168.1.1" - user="boschrexroth" - password="boschrexroth" - sslPort=443 ### Example 4: IPC Connection String (Snap Environment) When running inside a snap, `RemoteBuilder` automatically detects the environment and uses Inter-Process Communication (IPC). ```java // Connection string will be "ipc://" String connection = RemoteBuilder.create().build(); ``` ### Example 5: Manual Remote String Construction (Non-localhost C2C) If you don't want to communicate to localhost (e.g., C2C), build the remote string manually: ```java String remote = "tcp://{User}:{Password}@{Ip}?sslport={SslPort}"; ``` (sslport is optional) ``` -------------------------------- ### Start DatalayerSystem Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/api/net/html/interfaceDatalayer_1_1IDatalayerSystem.html Starts the DatalayerSystem. Use `startBroker: false` when acting as a user of the ctrlX Data Layer. ```csharp using var system = new DatalayerSystem(); system.Start(startBroker: false); ``` -------------------------------- ### Install snapcraft Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/README.md Installs the snapcraft tool, which is required for building certain types of applications. Run this script from the SDK's root directory. ```bash ctrlx-automation-sdk/scripts/install-snapcraft.sh ``` -------------------------------- ### Clone and Install ctrlX AUTOMATION SDK Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/README.md Downloads and installs the ctrlX AUTOMATION SDK from its GitHub repository. This script clones the repository and makes it executable. ```bash wget https://raw.githubusercontent.com/boschrexroth/ctrlx-automation-sdk/main/scripts/clone-install-sdk.sh && chmod a+x *.sh && ./clone-install-sdk.sh ``` -------------------------------- ### Problem Response Body Example Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/persist-device-settings.md An example of a JSON response body that an app should return when a GET or PUT request for settings fails. This format helps the Setup app report errors. ```json { "status": 400, "title": "Cannot parse value." } ``` -------------------------------- ### Post-Build Custom Command for Installation Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/samples-cpp/datalayer.sharedmemory/CMakeLists.txt Adds a custom command to run 'make install' after building the user and owner executables. ```cmake add_custom_command(TARGET ${TARGET_PROJECT_USER_NAME} POST_BUILD COMMAND make install ) add_custom_command(TARGET ${TARGET_PROJECT_OWNER_NAME} POST_BUILD COMMAND make install ) ``` -------------------------------- ### Set Installation Paths for Runtime Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/samples-cpp/datalayer.client.sub/CMakeLists.txt Defines the destination paths for installing the executable, libraries, and archives. Paths are relative to the build type and platform. ```cmake install( TARGETS ${TARGET_PROJECT_NAME} RUNTIME DESTINATION ${CMAKE_CURRENT_LIST_DIR}/generated/${PLATFORM_NAME}/${CMAKE_BUILD_TYPE} LIBRARY DESTINATION ${CMAKE_CURRENT_LIST_DIR}/generated/${PLATFORM_NAME}/${CMAKE_BUILD_TYPE} ARCHIVE DESTINATION ${CMAKE_CURRENT_LIST_DIR}/generated/${PLATFORM_NAME}/${CMAKE_BUILD_TYPE} COMPONENT ${BUNDLE_PROJECT_NAME} ) ``` -------------------------------- ### get IsStarted Property Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/api/net/html/classDatalayer_1_1DatalayerSystem.html Checks if the DatalayerSystem is started. ```APIDOC ## IsStarted ### Description Checks if the DatalayerSystem is started. ### Property Type bool ``` -------------------------------- ### Install ctrlX Data Layer Environment Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/samples-java/README.md Installs the build and runtime environment for ctrlX Data Layer. This script is necessary to use the Data Layer client and provider samples. ```bash ctrlx-automation-sdk/scripts/install-ctrlx-datalayer.sh ``` -------------------------------- ### Console Output Example Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/samples-node/datalayer.client.simple/README.md This snippet shows an example of the console output when running the datalayer.client.simple application. It includes system metrics and data layer values. ```bash running inside snap: false client remote address: tcp://boschrexroth:boschrexroth@10.0.2.2 framework/metrics/system/cpu-utilisation-percent:{"value":1.9,"type":"double","timestamp":"2021-10-20T13:40:45.892Z"} framework/metrics/system/memavailable-mb:{"value":680.578125,"type":"double","timestamp":"2021-10-20T13:40:45.896Z"} framework/metrics/system/membuffers-mb:{"value":119.00390625,"type":"double","timestamp":"2021-10-20T13:40:45.902Z"} framework/metrics/system/memcache-mb:{"value":514.56640625,"type":"double","timestamp":"2021-10-20T13:40:45.905Z"} framework/metrics/system/memfree-mb:{"value":164.43359375,"type":"double","timestamp":"2021-10-20T13:40:45.909Z"} framework/metrics/system/memtotal-mb:{"value":985.0078125,"type":"double","timestamp":"2021-10-20T13:40:45.913Z"} framework/metrics/system/memused-mb:{"value":187.00390625,"type":"double","timestamp":"2021-10-20T13:40:45.918Z"} framework/metrics/system/memused-percent:{"value":19.4,"type":"double","timestamp":"2021-10-20T13:40:45.923Z"} ``` -------------------------------- ### Console Output Example Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/samples-node/hello-world/README.md This is an example of the expected console output from the Node.js Hello World application. It shows the 'Hello World' message along with a timestamp. ```bash Hello World from Node.js! Thu, 07 Oct 2021 11:35:08 GMT Hello World from Node.js! Thu, 07 Oct 2021 11:35:09 GMT Hello World from Node.js! Thu, 07 Oct 2021 11:35:10 GMT Hello World from Node.js! Thu, 07 Oct 2021 11:35:11 GMT Hello World from Node.js! Thu, 07 Oct 2021 11:35:12 GMT ``` -------------------------------- ### Build and Upload Snap (Bare Metal Core Help) Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/samples-python/datalayer.remote.debug/README.md For bare metal ctrlX CORE devices, use this command to display help for providing settings via the command line when building and installing the snap. ```shell ../../scripts/build-upload-log-snap.sh -help ``` -------------------------------- ### IsStarted Property Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/api/net/html/classDatalayer_1_1DatalayerSystem.html Gets a value that indicates whether the DatalayerSystem is started. ```APIDOC ## IsStarted ### Description Gets a value that indicates whether the DatalayerSystem is started. ### Type bool [get] ### Usage `bool isStarted = datalayerSystem.IsStarted;` ``` -------------------------------- ### Navigate to Sample Project Directory Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/install-sources-from-github.md Change your current directory to a specific sample project within the cloned SDK repository. ```bash cd ~/ctrlx-automation-sdk/samples-cpp/datalayer.provider.all-data ``` -------------------------------- ### Create Client Instance Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/api/java/com/boschrexroth/api/Factory.html Demonstrates how to create a Client instance using the Factory. This is used for accessing system data. Ensure proper resource management with try-with-resources. ```Java try (com.boschrexroth.api.DlSystem s = com.boschrexroth.api.DlSystem.create("")) { ... try(Client c = s.createClient(" ... ")) { } ... } ``` -------------------------------- ### App Structure Example Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/appsigning-oem.md Illustrates the required directory structure for an OEM-signed app, including .signature and .snap files. ```text myapp_1.4.3.app └──public └──snaps ├──arm64 │ └──release │ ├──myapp_1.4.3.signature │ └──myapp_1.4.3.snap └──amd64 └──release ├──myapp_1.4.3.signature └──myapp_1.4.3.snap ``` -------------------------------- ### Asynchronous Metadata Retrieval Example Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/api/java/com/boschrexroth/api/Client.html Shows how to asynchronously retrieve metadata for a data item. This snippet includes the setup for capturing the response via CompletableFutures and a callback. ```java [Result](Result.html "enum class in com.boschrexroth.api") metadataAsync([String](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/lang/String.html "class or interface in java.lang") address, [ClientResponseCallback](ClientResponseCallback.html "interface in com.boschrexroth.api") response) ``` -------------------------------- ### Console Output Example Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/samples-node/datalayer.client.bulkread/README.md This is an example of the console output you can expect when the application is running. It shows the addresses, values, timestamps, and results of bulk read operations. ```bash connection string: ipc:// address: framework/metrics/system/cpu-utilisation-percent, value: 27.6, timestamp: 2022-10-18T14:40:15.440Z, result: DL_OK address: framework/metrics/system/memavailable-mb, value: 401.9296875, timestamp: 2022-10-18T14:40:15.440Z, result: DL_OK address: framework/metrics/system/membuffers-mb, value: 12.60546875, timestamp: 2022-10-18T14:40:15.440Z, result: DL_OK address: framework/metrics/system/memcache-mb, value: 400.5859375, timestamp: 2022-10-18T14:40:15.440Z, result: DL_OK address: framework/metrics/system/memfree-mb, value: 25.640625, timestamp: 2022-10-18T14:40:15.440Z, result: DL_OK address: framework/metrics/system/memtotal-mb, value: 975.8125, timestamp: 2022-10-18T14:40:15.440Z, result: DL_OK address: framework/metrics/system/memused-percent, value: 56.3, timestamp: 2022-10-18T14:40:15.440Z, result: DL_OK ``` -------------------------------- ### Asynchronous Read Operation Example Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/api/java/com/boschrexroth/api/Client.html Demonstrates how to perform an asynchronous read operation using the Client API. It shows the setup of CompletableFutures and a callback to capture the response, followed by retrieving the data. ```java CompletableFuture futureResponseVariant = new CompletableFuture<>(); CompletableFuture futureResponseResult = new CompletableFuture<>(); ClientResponseCallback callback = (result, variant, userdata) -> { futureResponseVariant.complete(variant); futureResponseResult.complete(result); }; Result res = c.readSync(" ... ", callback); Variant receivedVariant = futureResponseVariant.get(5, TimeUnit.SECONDS); // Wait up to 5 seconds Result receivedResult = futureResponseResult.get(5, TimeUnit.SECONDS); ``` -------------------------------- ### Get list of all activated capabilities Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/licensing.md Retrieves a list of all currently activated license capabilities on the device. This includes details like whether the license is permanent, its expiration and start dates, name, count, and version. ```APIDOC ## GET /capabilities ### Description Retrieves a list of all activated license capabilities. ### Method GET ### Endpoint /capabilities ### Parameters None ### Response #### Success Response (200) - **capabilities** (array) - A list of license capability objects. - **isPermanent** (boolean) - Indicates if the license is permanent. - **finalExpirationDate** (string) - The final expiration date of the license. - **name** (string) - The name of the license capability. - **count** (integer) - The number of available licenses. - **version** (string) - The version of the license. - **startDate** (string) - The start date of the license. ### Response Example ```json [ { "isPermanent": true, "finalExpirationDate": "2030-01-01T12:00:27.87+00:20", "name": "SWL-XCx-FRW-BASIC_FOOBAR-NNNN", "count": 1, "version": "1.0", "startDate": "2030-01-01T12:00:27.87+00:20" } ] ``` ``` -------------------------------- ### Asynchronous Browse Operation Example Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/api/java/com/boschrexroth/api/Client.html Provides an example of an asynchronous browse operation. It sets up CompletableFutures and a callback to capture the results of browsing data items from a specified address. ```java CompletableFuture futureResponseVariant = new CompletableFuture<>(); CompletableFuture futureResponseResult = new CompletableFuture<>(); ClientResponseCallback callback = (result, variant, userdata) -> { futureResponseVariant.complete(variant); futureResponseResult.complete(result); }; Result res = c.browseAsync(" ... ", callback); Variant receivedVariant = futureResponseVariant.get(5, TimeUnit.SECONDS); // Wait up to 5 seconds Result receivedResult = futureResponseResult.get(5, TimeUnit.SECONDS); ``` -------------------------------- ### Install ngx-translate and related packages Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/localization.md Installs the necessary libraries for localization using npm. Ensure you have npm installed. ```bash npm install @ngx-translate/core @ngx-translate/http-loader rxjs --save npm install ngx-translate-multi-http-loader --save ``` -------------------------------- ### Install SDK on App Build Environment Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/fbs2plc.md Installs the ctrlX AUTOMATION SDK on your App Build Environment using a provided script. This is a prerequisite for building and deploying PLC code that interacts with the SDK. ```bash $ ~/scripts/install-sdk.sh ``` -------------------------------- ### Implement Runtime Health Monitoring and Error Reporting Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/samples-snap/self-health/README.md Monitor operational conditions and proactively set the health status to 'error' with a meaningful message when problems are detected. The code must start with lowercase ASCII letters and contain only ASCII letters and numbers, optionally separated by single dashes. This example shows reporting an error and then returning to an 'okay' state. ```bash echo "Dummy App [error]: uuups, something went wrong: error" # when status is not "okay", message is required # code must start with lowercase ASCII letters, and contain only ASCII letters and numbers, optionally separated by single dashes snapctl set-health error --code="code-17" "error message" sleep 5s echo "Dummy App [okay]: ready again" snapctl set-health okay ``` -------------------------------- ### Build and Run TPM2 SRK Sample Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/samples-go/tpm2.srk/README.md Build the TPM2 SRK sample application and set the TPM2 socket path. Then, execute commands to create and load TPM2 objects. ```bash cd samples-go/tpm2.srk go build ./cmd/tpm2 export TPM2_SOCKET="" ./tpm2 create ./tpm2 load ``` -------------------------------- ### Launch QEMU VM with Direct Internet Access Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/setup_qemu_ubuntu.md This script launches a QEMU virtual machine instance that has direct internet access. It should be run from the instance folder. ```bash ./launch-amd64-noproxy.sh ``` -------------------------------- ### Launch amd64 App Build Environment (No Proxy) Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/scripts/environment/README.md Use this script to start an amd64 App Build Environment when your host has direct internet access. Ensure the necessary files are in your working directory. ```bash launch-amd64-noproxy.sh ``` -------------------------------- ### Install and Run App via Snap Logs Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/samples-net/datalayer.client.simple/README.md View application output diagnostics by logging into ctrlX, navigating to Diagnostics -> Logbook, and enabling system messages. Alternatively, use the 'snap logs' command on an SSH console. ```bash sudo snap logs sdk-net-client-simple.app -f | more ``` -------------------------------- ### Launch amd64 App Build Environment (With Proxy) Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/scripts/environment/README.md Use this script to start an amd64 App Build Environment when your host uses a proxy server on port 3128. Ensure the necessary files are in your working directory. ```bash launch-amd64-proxy.sh ``` -------------------------------- ### Example package-manifest.json Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/package-assets.md Illustrates a typical package-manifest.json file, defining application metadata, scopes, services, menus, commands, and documentation links. ```json { "$schema": "https://json-schema.boschrexroth.com/ctrlx-automation/ctrlx-os/apps/package-manifest/package-manifest.v1.4.schema.json", "version": "1.0.0", "id": "ctrlx-helloworld", "required": false, "scopes-declaration": [ { "identifier": "ctrlx-helloworld.web", "name": "Helloworld Scopes", "description": "Scopes for the Hello World App", "scopes": [ { "identifier": "ctrlx-helloworld.web.all.rw", "name": "Manage hello world", "description": "Manage and modify hello world", "i18n": "scopes.manage" }, { "identifier": "ctrlx-helloworld.web.all.r", "name": "View hello world", "description": "View (but not modify) hello world", "i18n": "scopes.view" } ] } ], "services": { "proxyMapping": [ { "name": "ctrlx-helloworld.web", "url": "/ctrlx-helloworld", "binding": "unix://{$SNAP_DATA}/package-run/ctrlx-helloworld/ctrlx-helloworld.web.sock", "caddyfile": "./caddyfile", "options": [ { "option": "websockets", "value": "" }, { "option": "max_conns", "value": "2" } ], "restricted": [ "/ctrlx-helloworld/api/v1", { "path": "/my-app/api/v1.0", "except": [ "/my-app/api/v1.0/except-path-1", "/my-app/api/v1.0/except-path-2" ], "headersForwarding": [ "X-Auth-Name", "X-Auth-ID", "X-Auth-Scopes", "X-Auth-Expires", "X-Auth-Issued", "X-Auth-PlcHandle", "X-Auth-RemoteAuth", "X-Auth-Nonce" ] } ] } ] }, "menus": { "sidebar": [ { "id": "helloworld", "title": "Hello, World!", "icon": "bosch-ic-world-frame", "permissions": [ "ctrlx-helloworld.web.all.r", "ctrlx-helloworld.web.all.rw" ], "items": [ { "id": "helloworld-home", "title": "Overview", "link": "/ctrlx-helloworld", "permissions": [ "ctrlx-helloworld.web.all.r", "ctrlx-helloworld.web.all.rw" ], "items": [] }, { "id": "helloworld-manage", "title": "Manage", "link": "/ctrlx-helloworld/manage", "permissions": ["ctrlx-helloworld.web.all.rw"], "items": [] } ] } ], "settings": [ { "id": "helloworld-settings", "title": "Hello World!", "link": "/ctrlx-helloworld/settings", "permissions": ["ctrlx-helloworld.web.all.rw"], "items": [] } ], "overview": [ { "id": "helloworld-home", "title": "Overview", "link": "/ctrlx-helloworld", "icon": "bosch-ic-world-frame", "permissions": [ "ctrlx-helloworld.web.all.r", "ctrlx-helloworld.web.all.rw" ], "items": [] } ] }, "commands": { "activeConfiguration": { "save": [ { "id": "ctrlx-helloworld", "subject": "hello world", "url": "/ctrlx-helloworld/api/v1/save" } ], "load": [ { "id": "ctrlx-helloworld", "subject": "hello world", "url": "/ctrlx-helloworld/api/v1/load" } ] } }, "documentation": [ { "name": "My-App API", "description": "Provides my-app related functionalities on ctrlX devices.", "type": "api", "url": "/my-app/doc/api" } ], "configuration": { "appDirectories": [ { "name": "my-app", "description": "My cool feature", "icon": "my-icon", "copyOnLoad": true } ] } } ``` -------------------------------- ### Example ctrlx-backup.json Structure Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/persist-device-settings.md Illustrates the structure of a ctrlx-backup.json file after creating a backup with declared settings. Includes paths for file-based settings. ```json { "apps": { "myApp" : { "settings": { "foo": "some value", "bar": { "enabled": true, "title": "my title" }, "baz": { "$path":"apps/myApp/settings/baz.bin" }, "secret": { "$path":"apps/myApp/settings/secret.bin.aes" } } } } } ``` -------------------------------- ### get IpcPath Property Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/api/net/html/classDatalayer_1_1DatalayerSystem.html Gets the interprocess communication path. ```APIDOC ## IpcPath ### Description Gets the interprocess communication path. ### Property Type string ``` -------------------------------- ### Launch QEMU VM with Proxy Server Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/setup_qemu_ubuntu.md This script launches a QEMU virtual machine instance that uses a proxy server on the host computer for internet access. It should be run from the instance folder. ```bash ./launch-amd64-proxy.sh ``` -------------------------------- ### get Factory Property Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/api/net/html/classDatalayer_1_1DatalayerSystem.html Gets the Factory to create Clients and Providers. ```APIDOC ## Factory ### Description Gets the Factory to create Clients and Providers. ### Property Type [IFactory](interfaceDatalayer_1_1IFactory.html) ### Exceptions * **ObjectDisposedException** - Cannot access a disposed object. * **InvalidOperationException** - Operation not allowed. ``` -------------------------------- ### Start DatalayerSystem Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/api/net/html/classDatalayer_1_1DatalayerSystem.html Starts the DatalayerSystem. Set startBroker to true to start a broker, or false if you are a user of the ctrlX Data Layer. This method can throw an ObjectDisposedException if the object has already been disposed. ```csharp void Start( bool _startBroker_ = false ) ``` ```csharp using var system = new DatalayerSystem(); system.Start(startBroker: false); ``` -------------------------------- ### Build and Upload Snap (Virtual Core with Network Adapter) Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/samples-python/datalayer.remote.debug/README.md Use this shell script command to build, upload, and install the snap on a ctrlX CORE virtual device when using a network adapter. ```shell ../../scripts/build-upload-log-snap.sh -NA ``` -------------------------------- ### Build and Run Application Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/samples-java/datalayer.provider.sub/README.md Commands to clean, build, and run the application as a provider or client using Gradle. ```bash ./gradlew clean ./gradlew build ./gradlew run --args="provider" ./gradlew run --args="client" ``` -------------------------------- ### Get IpcPath Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/api/net/html/interfaceDatalayer_1_1IDatalayerSystem.html Gets the interprocess communication path. This property getter can throw an ObjectDisposedException. ```csharp string IpcPath { get; } ``` -------------------------------- ### Start Provider Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/api/python/provider_8py_source.html Starts the provider service. This method should be called to enable data layer operations. ```python return [Result](classctrlxdatalayer_1_1variant_1_1Result.html)(ctrlxdatalayer.clib.libcomm_datalayer.DLR_providerStart(self.__provider)) ``` -------------------------------- ### Example ctrlx-backup.json with Snapshot Settings Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/persist-device-settings.md Illustrates the expected structure of a 'ctrlx-backup.json' file when the snapshot mechanism is enabled, showing the path to the app's snapshot file. ```json { "apps": { "myApp" : { "settings": { "$path": "apps/myApp/settings/app.snapshot" } } } } ``` -------------------------------- ### Install Executables for Snap Builds Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/samples-cpp/datalayer.sharedmemory/CMakeLists.txt Installs executables to a 'build' directory when the BUILD_SNAP option is enabled. ```cmake if (BUILD_SNAP) install( TARGETS ${TARGET_PROJECT_OWNER_NAME} RUNTIME DESTINATION ${CMAKE_CURRENT_LIST_DIR}/generated/build LIBRARY DESTINATION ${CMAKE_CURRENT_LIST_DIR}/generated/build ARCHIVE DESTINATION ${CMAKE_CURRENT_LIST_DIR}/generated/build COMPONENT ${BUNDLE_PROJECT_NAME} ) install( TARGETS ${TARGET_PROJECT_USER_NAME} RUNTIME DESTINATION ${CMAKE_CURRENT_LIST_DIR}/generated/build LIBRARY DESTINATION ${CMAKE_CURRENT_LIST_DIR}/generated/build ARCHIVE DESTINATION ${CMAKE_CURRENT_LIST_DIR}/generated/build COMPONENT ${BUNDLE_PROJECT_NAME} ) endif(BUILD_SNAP) ``` -------------------------------- ### Build and Upload Snap (Virtual Core with Port Forwarding) Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/samples-python/datalayer.remote.debug/README.md Use this shell script command to build, upload, and install the snap on a ctrlX CORE virtual device when port forwarding is enabled. ```shell ../../scripts/build-upload-log-snap.sh -PF ``` -------------------------------- ### Get Converter Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/api/net/html/interfaceDatalayer_1_1IDatalayerSystem.html Gets the Converter for Variant to JSON conversions. This property getter can throw an ObjectDisposedException. ```csharp IConverter Converter { get; } ``` -------------------------------- ### Create and Activate Virtual Environment Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/samples-python/README.md Sets up a virtual Python environment and installs required packages from requirements.txt. ```bash ./install-venv.sh ``` -------------------------------- ### Build Snap Package Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/install-sources-from-github.md Execute the build script to create a snap package for the sample project on an amd64 architecture. ```bash ./build-snap-amd64.sh ``` -------------------------------- ### Example package-manifest.json Structure Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/package-assets.md Illustrates the structure of a package-manifest.json file, showing various configuration options for apps, certificates, dependencies, and UI extensions. ```json { "writeProtected": true } ], "appPrivateFiles": ["^my-app/[^/]+\\.bak$", "^my-app/tmp"] }, "certificatestores": [ { "id": "ctrlx-helloworld.certificates", "title": "Hello World Certificate Store", "description": "Certficates & Keys to connect to the World" } ], "apps": { "rexroth-remoteagent": { "commands": ["BACKUP", "RESTORE", "REBOOT"] } }, "dependencies": { "dependsOn": { "rexroth-deviceadmin": "~1.20.0" } }, "licenses": [ { "name": "SWL-XC*-RUN-DLACCESSNRT**-NNNN", "title": "ctrlX OS License - Customer App", "description": "Integration of customer apps into ctrlX OS with access to the ctrlX Data Layer", "required": true } ], "uiExtensions": { "dashboard": [ { "order": 10, "src": "/myApp/widgets.js", "tag": "rexroth-myapp-widget", "title": "Hello World", "description": "Say Hello to ctrlX OS World", "categories": ["MyApp"], "i18n": "dashboard.myapp.helloworld", "image": "/myApp/assets/img/hello_world_192x192_202102.svg", "initialSize": { "rows": 3, "cols": 3 }, "minSize": { "rows": 3, "cols": 3 }, "maxSize": { "rows": 3, "cols": 3 } } ] } } ``` -------------------------------- ### Get Factory Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/api/net/html/interfaceDatalayer_1_1IDatalayerSystem.html Gets the Factory to create Clients and Providers. This property getter can throw ObjectDisposedException or InvalidOperationException. ```csharp IFactory Factory { get; } ``` -------------------------------- ### Initialize Snap Environment Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/samples-snap/generate-manifest/README.md Use this command to initialize the snap environment in an empty folder. ```bash snapcraft init ``` -------------------------------- ### Install Executables for Release Builds Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/samples-cpp/datalayer.sharedmemory/CMakeLists.txt Installs the owner and user executables to a platform-specific runtime directory for release builds. ```cmake install( TARGETS ${TARGET_PROJECT_OWNER_NAME} RUNTIME DESTINATION ${CMAKE_CURRENT_LIST_DIR}/generated/${PLATFORM_NAME}/${CMAKE_BUILD_TYPE} LIBRARY DESTINATION ${CMAKE_CURRENT_LIST_DIR}/generated/${PLATFORM_NAME}/${CMAKE_BUILD_TYPE} ARCHIVE DESTINATION ${CMAKE_CURRENT_LIST_DIR}/generated/${PLATFORM_NAME}/${CMAKE_BUILD_TYPE} COMPONENT ${BUNDLE_PROJECT_NAME} ) install( TARGETS ${TARGET_PROJECT_USER_NAME} RUNTIME DESTINATION ${CMAKE_CURRENT_LIST_DIR}/generated/${PLATFORM_NAME}/${CMAKE_BUILD_TYPE} LIBRARY DESTINATION ${CMAKE_CURRENT_LIST_DIR}/generated/${PLATFORM_NAME}/${CMAKE_BUILD_TYPE} ARCHIVE DESTINATION ${CMAKE_CURRENT_LIST_DIR}/generated/${PLATFORM_NAME}/${CMAKE_BUILD_TYPE} COMPONENT ${BUNDLE_PROJECT_NAME} ) ``` -------------------------------- ### Install Hook Script Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/samples-snap/generate-manifest/README.md This bash script is executed after the snap is installed. It should contain the logic to generate the package manifest. ```bash #!/bin/bash ``` -------------------------------- ### Start Remote Debugger Source: https://github.com/boschrexroth/ctrlx-automation-sdk/blob/main/doc/samples-cpp/scheduler.remote/README.md Start the gdbserver for remote debugging of the scheduler application. This command should be run on the controller via SSH. ```bash sudo snap run --experimental-gdbserver=:12345 sdk-cpp-remote-scheduler.app ```