├── .github └── workflows │ ├── free-disk-space │ └── action.yml │ └── main.yml ├── .gitignore ├── .gitlab-ci.yml ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── COPYING.MIT ├── Kconfig ├── MAINTAINERS ├── README.md ├── classes ├── git-timestamp.bbclass ├── node-red-module.bbclass └── npm.bbclass ├── conf ├── distro │ └── iot2050-debian.conf ├── layer.conf └── machine │ ├── iot2050-qemu.conf │ └── iot2050.conf ├── kas-container ├── kas-docker ├── kas-iot2050-boot.yml ├── kas-iot2050-example.yml ├── kas-iot2050-fwu-package.yml ├── kas-iot2050-qemu.yml ├── kas-iot2050-swupdate.yml ├── kas ├── iot2050.yml └── opt │ ├── debian-mirror.yml │ ├── docker.yml │ ├── eio.yml │ ├── lxde.yml │ ├── meta-hailo.yml │ ├── module.yml │ ├── no-node-red.yml │ ├── otpcmd │ ├── key-provision-3keys.yml │ ├── key-provision-enabling-only.yml │ ├── key-provision-keys-only.yml │ ├── key-provision.yml │ ├── key-switch-2to3.yml │ ├── key-switch.yml │ └── otp.yml │ ├── package-lock.yml │ ├── preempt-rt.yml │ ├── rpmb-setup.yml │ ├── sdk.yml │ ├── secure-boot.yml │ └── upstream.yml ├── meta-hailo ├── MAINTAINERS.md ├── README.md ├── conf │ └── layer.conf ├── recipes-app │ ├── hailort │ │ ├── files │ │ │ ├── debian │ │ │ │ ├── control │ │ │ │ ├── hailort.install │ │ │ │ ├── hailort.service │ │ │ │ ├── hailortcli.install │ │ │ │ ├── libgsthailo-dev.install │ │ │ │ ├── libgsthailo.install │ │ │ │ ├── libhailort-dev.install │ │ │ │ ├── libhailort.install │ │ │ │ ├── not-installed │ │ │ │ ├── python-numpy.pref │ │ │ │ ├── python3-hailort.install │ │ │ │ └── rules │ │ │ └── patches │ │ │ │ ├── 0001-do-not-use-spdlog-formatting-internals.patch │ │ │ │ ├── 0002-use-distro-version-of-packages-if-possible.patch │ │ │ │ ├── 0003-install-independent-of-build-target.patch │ │ │ │ ├── 0004-install-python-bindings-into-dist-packages.patch │ │ │ │ └── 0005-Fix-cross-compilation-issue-for-pybuild.patch │ │ └── hailort_4.18.0.bb │ └── tappas │ │ ├── README.md │ │ ├── detection_pipeline.gif │ │ ├── files │ │ ├── debian │ │ │ ├── control │ │ │ ├── hailo-post-processes.install │ │ │ ├── libgsthailotools.install │ │ │ ├── not-installed │ │ │ ├── rules │ │ │ ├── tappas-apps.install │ │ │ └── tappas-tracers.install │ │ └── patches │ │ │ ├── 0001-tappas-Adapt-tappas-apps-for-compatibility-with-meta.patch │ │ │ └── 0002-Do-not-install-binaries-without-clear-license-clarif.patch │ │ ├── lpr_pipeline.gif │ │ ├── multistream_detection.gif │ │ └── tappas_3.29.1.bb ├── recipes-bsp │ └── hailo-firmware │ │ └── hailo-firmware_4.18.0.bb ├── recipes-kernel │ └── hailo-pci │ │ └── hailo-pci_4.18.0.bb └── recipes-python │ ├── python-numpy │ ├── files │ │ └── debian │ │ │ ├── control │ │ │ └── rules │ └── python-numpy_1.23.3.bb │ └── python-verboselogs │ ├── files │ └── debian │ │ ├── control │ │ └── rules │ └── python-verboselogs_1.7.bb ├── recipes-app ├── board-conf-tools │ ├── board-conf-tools_0.1.bb │ └── files │ │ ├── board-bootup-configuration.service │ │ ├── board-conf-tools │ │ ├── board-bootup-conf.py │ │ ├── iot2050setup.py │ │ └── json_ops │ │ │ ├── __init__.py │ │ │ ├── board-configuration.json │ │ │ └── json_ops.py │ │ └── postinst ├── iot2050-conf-webui │ ├── README.md │ ├── files │ │ ├── .eslintrc.yml │ │ ├── iot2050-conf-webui.service │ │ ├── jsconfig.json │ │ ├── next.config.js │ │ ├── npm-shrinkwrap.json │ │ ├── npm-shrinkwrap.json.nodev │ │ ├── package.json │ │ └── src │ │ │ ├── app │ │ │ ├── deploy │ │ │ │ └── route.js │ │ │ ├── favicon.ico │ │ │ ├── icon-siemens.svg │ │ │ ├── layout.js │ │ │ ├── page.js │ │ │ ├── retrieve │ │ │ │ └── route.js │ │ │ └── smconf │ │ │ │ └── page.js │ │ │ ├── components │ │ │ ├── ConfigEntry │ │ │ │ ├── CheckConfig.js │ │ │ │ ├── ConfigGroupLabel.js │ │ │ │ ├── SelectionConfig.js │ │ │ │ └── SliderConfig.js │ │ │ ├── ExtendedModules │ │ │ │ ├── SM1221_8DI │ │ │ │ │ └── SM1221with8DIConf.js │ │ │ │ ├── SM1223 │ │ │ │ │ ├── SM1223Conf.js │ │ │ │ │ ├── SM1223_AC_DI8_DQ8RLY_Conf.js │ │ │ │ │ └── SM1223_DC_DI16_DQ16RLY_Conf.js │ │ │ │ ├── SM1231_AI │ │ │ │ │ ├── SM1231AIConf.js │ │ │ │ │ ├── SM1231with4AIConf.js │ │ │ │ │ └── SM1231with8AIConf.js │ │ │ │ ├── SM1231_RTD │ │ │ │ │ ├── SM1231_4RTDConf.js │ │ │ │ │ ├── SM1231_8RTDConf.js │ │ │ │ │ └── SM1231_RTDConf.js │ │ │ │ ├── SM1238_EM480VAC │ │ │ │ │ └── SM1238EM480VACConf.js │ │ │ │ └── SMSensDI │ │ │ │ │ └── SMSensDIConf.js │ │ │ ├── ModuleInfo.js │ │ │ ├── SlotInfo.js │ │ │ └── ThemeRegistry │ │ │ │ ├── EmotionCache.js │ │ │ │ ├── ThemeRegistry.js │ │ │ │ ├── fonts │ │ │ │ ├── SiemensSans_Prof_Bold.woff2 │ │ │ │ ├── SiemensSans_Prof_BoldItalic.woff2 │ │ │ │ ├── SiemensSans_Prof_Italic.woff2 │ │ │ │ └── SiemensSans_Prof_Roman.woff2 │ │ │ │ └── theme.js │ │ │ └── lib │ │ │ ├── eioService │ │ │ └── eioService.js │ │ │ ├── gRPC │ │ │ └── iot2050-eio.proto │ │ │ ├── smConfig │ │ │ ├── ConfTextConverter.js │ │ │ └── smConfig.js │ │ │ └── uiString │ │ │ ├── SM1221_8DI.json │ │ │ ├── SM1223.json │ │ │ ├── SM1231_AI.json │ │ │ ├── SM1231_RTD.json │ │ │ └── SM1238EM480VAC.json │ └── iot2050-conf-webui_0.1.bb ├── iot2050-efivarfs-helper │ ├── files │ │ └── iot2050-efivarfs-helper.tmpl │ └── iot2050-efivarfs-helper_0.1.bb ├── iot2050-eio-manager │ ├── README.md │ ├── files │ │ ├── bin │ │ │ ├── .gitignore │ │ │ └── README.md │ │ ├── config-schema │ │ │ ├── schema-na.yaml │ │ │ ├── schema-sm-config.yaml │ │ │ ├── schema-sm-sens-di.yaml │ │ │ ├── schema-sm1221-8di.yaml │ │ │ ├── schema-sm1223-di-dq.yaml │ │ │ ├── schema-sm1231-ai.yaml │ │ │ ├── schema-sm1231-rtd.yaml │ │ │ └── schema-sm1238-em-480vac.yaml │ │ ├── config-template │ │ │ ├── mlfb-6ES7221-1BF32-0XB0.yaml │ │ │ ├── mlfb-6ES7223-1PL32-0XB0.yaml │ │ │ ├── mlfb-6ES7223-1QH32-0XB0.yaml │ │ │ ├── mlfb-6ES7231-4HD32-0XB0.yaml │ │ │ ├── mlfb-6ES7231-4HF32-0XB0.yaml │ │ │ ├── mlfb-6ES7231-5PD32-0XB0.yaml │ │ │ ├── mlfb-6ES7231-5PF32-0XB0.yaml │ │ │ ├── mlfb-6ES7238-5XA32-0XB0.yaml │ │ │ ├── mlfb-6ES7647-0CM00-1AA2.yaml │ │ │ ├── mlfb-NA.yaml │ │ │ └── sm-config-example.yaml │ │ ├── gRPC │ │ │ └── EIOManager │ │ │ │ ├── iot2050-eio.proto │ │ │ │ ├── iot2050_eio_pb2.py │ │ │ │ ├── iot2050_eio_pb2.pyi │ │ │ │ └── iot2050_eio_pb2_grpc.py │ │ ├── iot2050-eio-cli.py │ │ ├── iot2050-eio-fwu-monitor.service │ │ ├── iot2050-eio-service.py │ │ ├── iot2050-eio-time-syncing.py │ │ ├── iot2050-eio-time-syncing.service │ │ ├── iot2050-eiod.service │ │ ├── iot2050-eiofsd.service │ │ ├── iot2050_eio_config.py │ │ ├── iot2050_eio_event.py │ │ ├── iot2050_eio_fwu.py │ │ ├── iot2050_eio_fwu_monitor.py │ │ └── iot2050_eio_global.py │ └── iot2050-eio-manager_0.1.bb ├── iot2050-event-record │ ├── README.md │ ├── WATCHDOG.md │ ├── files │ │ ├── gRPC │ │ │ ├── EIOManager │ │ │ └── EventInterface │ │ │ │ ├── iot2050-event.proto │ │ │ │ ├── iot2050_event_pb2.py │ │ │ │ ├── iot2050_event_pb2.pyi │ │ │ │ └── iot2050_event_pb2_grpc.py │ │ ├── iot2050-event-record.conf │ │ ├── iot2050-event-record.py │ │ ├── iot2050-event-record.service │ │ ├── iot2050-event-serve.py │ │ ├── iot2050-event-serve.service │ │ ├── iot2050_event.py │ │ └── iot2050_event_global.py │ └── iot2050-event-record_0.1.bb ├── iot2050-firmware-update │ ├── files │ │ ├── iot2050-firmware-update.tmpl │ │ └── update.conf.json.tmpl │ └── iot2050-firmware-update_0.5.bb ├── iot2050-module-firmware-update │ ├── files │ │ └── iot2050-module-firmware-update.tmpl │ └── iot2050-module-firmware-update_01.bb ├── mindconnect-node-red-contrib-mindconnect │ ├── files │ │ └── npm-shrinkwrap.json │ └── mindconnect-node-red-contrib-mindconnect_3.12.1.bb ├── mraa │ ├── files │ │ ├── 0001-gpio-Fix-JS-binding-regarding-interrupt-injections.patch │ │ ├── 0002-common-increase-pin-name-size.patch │ │ ├── 0003-iot2050-add-debugfs-pinmux-support.patch │ │ ├── 0004-iot2050-Add-support-for-the-new-IOT2050-SM-variant.patch │ │ └── rules │ └── mraa_2.2.0+git20220805.8b1c5493.bb ├── node-red-contrib-modbus │ ├── files │ │ └── npm-shrinkwrap.json │ └── node-red-contrib-modbus_5.26.0.bb ├── node-red-contrib-opcua │ ├── files │ │ └── npm-shrinkwrap.json │ └── node-red-contrib-opcua_0.2.309.bb ├── node-red-contrib-s7 │ ├── files │ │ └── npm-shrinkwrap.json │ └── node-red-contrib-s7_3.1.0.bb ├── node-red-dashboard │ ├── files │ │ └── npm-shrinkwrap.json │ └── node-red-dashboard_3.5.0.bb ├── node-red-gpio │ ├── files │ │ ├── 0001-mraa-gpio-Change-text-x-red-to-text-html.patch │ │ ├── 0002-mraa-gpio-Pass-settings-from-js-to-html.patch │ │ ├── 0003-mraa-gpio-din-Make-D14-D19-IOT2050-only.patch │ │ ├── 0004-mraa-gpio-din-Fix-the-for-attribute-of-lables.patch │ │ ├── 0005-mraa-gpio-dout-Add-D14-D19-for-IOT2050.patch │ │ ├── 0006-mraa-gpio-Make-led-node-IOT2050-only.patch │ │ ├── 0007-mraa-gpio-Fix-led-label-in-the-flow-editor.patch │ │ ├── 0008-mraa-gpio-Add-support-for-IOT2050-SM.patch │ │ └── 0009-mraa-gpio-pwm-Set-pin-options-according-to-board-typ.patch │ └── node-red-gpio_0.4.0+git.bb ├── node-red-node-random │ ├── files │ │ └── npm-shrinkwrap.json │ └── node-red-node-random_0.4.1.bb ├── node-red-node-serialport │ ├── files │ │ └── npm-shrinkwrap.json │ └── node-red-node-serialport_1.0.4.bb ├── node-red-node-sqlite │ ├── files │ │ └── npm-shrinkwrap.json │ └── node-red-node-sqlite_1.0.3.bb ├── node-red-preinstalled-nodes │ └── node-red-preinstalled-nodes_0.1.bb ├── node-red │ ├── files │ │ ├── node-red.service.tmpl │ │ └── npm-shrinkwrap.json │ ├── node-red-home.inc │ └── node-red_3.0.2.bb ├── switchserialmode │ ├── files │ │ └── src │ │ │ ├── CMakeLists.txt │ │ │ ├── gpio_helper.c │ │ │ ├── gpio_helper.h │ │ │ ├── serial │ │ │ ├── cp2102n.c │ │ │ └── omap_8250.c │ │ │ ├── switchserialmode.c │ │ │ ├── switchserialmode.h │ │ │ └── transceiver │ │ │ └── sp339e.c │ └── switchserialmode_0.5.bb └── tcf-agent │ ├── files │ └── debian │ │ ├── compat │ │ ├── control │ │ ├── rules │ │ ├── tcf-agent.install │ │ └── tcf-agent.service │ └── tcf-agent.bb ├── recipes-bsp ├── k3-rti-wdt │ ├── files │ │ └── rules │ └── k3-rti-wdt_1.2.bb ├── optee-client │ └── optee-client-iot2050_4.0.0.bb ├── optee-ftpm │ ├── files │ │ └── 0001-add-enum-to-ta-flags.patch │ └── optee-ftpm-iot2050_0~231017+git.bb ├── optee-os │ ├── optee-os-iot2050_4.0.0.bb │ ├── optee-os-iot2050_4.0.0.inc │ └── optee-os-tadevkit-iot2050_4.0.0.bb ├── patch-u-boot-env │ ├── files │ │ ├── patch-u-boot-env.config │ │ ├── patch-u-boot-env.service │ │ └── patch-u-boot-env.sh │ └── patch-u-boot-env_0.1.bb ├── secure-boot-otp-provisioning │ ├── README.md │ ├── files │ │ ├── its │ │ │ ├── include │ │ │ │ ├── key-provision-bmpk.its │ │ │ │ └── key-provision-mpk-smpk.its │ │ │ ├── key-provision-3keys.its │ │ │ ├── key-provision-enabling-only.its │ │ │ ├── key-provision-keys-only.its │ │ │ ├── key-provision.its │ │ │ └── key-switch.its │ │ ├── keys │ │ │ ├── custBmpk.crt │ │ │ ├── custBmpk.pem │ │ │ ├── custMpk.crt │ │ │ ├── custMpk.pem │ │ │ ├── custSmpk.crt │ │ │ └── custSmpk.pem │ │ ├── make-otpcmd.sh │ │ └── rules.tmpl │ └── secure-boot-otp-provisioning_0.1.bb ├── ti-pruss-firmware │ └── ti-pruss-firmware_09.00.00.005.bb ├── trusted-firmware-a │ └── trusted-firmware-a-iot2050_2.8.10.bb └── u-boot │ ├── README.md │ ├── back_iot2050.png │ ├── files │ ├── 0001-arm-dts-iot2050-Add-overlay-for-DMA-isolation-for-de.patch │ ├── 0002-board-siemens-iot2050-Generalize-overlay_prepare.patch │ ├── 0003-board-siemens-iot2050-Allow-to-enable-and-adjust-res.patch │ ├── 0004-arm-dts-iot2050-Enforce-DMA-isolation-for-devices-be.patch │ ├── fw_env.config │ ├── keys │ │ ├── custMpk.crt │ │ ├── custMpk.key │ │ └── custMpk.pem │ ├── otpcmd.cfg │ ├── prebuild │ │ ├── 0009-dts-iot2050-Sync-kernel-dts-to-u-boot.patch │ │ ├── 0010-dts-iot2050-Support-new-IOT2050-SM-variant.patch │ │ ├── seboot_pg1.bin │ │ └── seboot_pg2.bin │ ├── rpmb-setup.cfg │ ├── rules.tmpl │ └── secure-boot.cfg │ ├── u-boot-iot2050.inc │ └── u-boot-iot2050_2025.04.bb ├── recipes-core ├── customizations-base │ ├── customizations-base_0.1-iot2050-debian.bb │ └── files │ │ └── postinst.tmpl ├── customizations-example │ ├── customizations-example_0.1-iot2050-debian.bb │ └── files │ │ ├── 10-globally-managed-devices.conf │ │ ├── 20-assign-ethernet-names.rules │ │ ├── 20-create-symbolic-link-for-serial-port.rules │ │ ├── cellular-4g │ │ ├── eno1-default │ │ ├── postinst │ │ ├── status-led.service │ │ └── terminal_resize.sh ├── images │ ├── iot2050-image-base.bb │ ├── iot2050-image-example.bb │ ├── iot2050-image-swu-example.bb │ └── iot2050-package-selections.inc ├── install-on-emmc │ ├── files │ │ ├── install-on-emmc-on-first-boot.service │ │ ├── install-on-emmc.sh │ │ └── postinst │ └── install-on-emmc_1.0.bb ├── iot2050-firmware │ └── iot2050-firmware_0.1.bb ├── iot2050-proximity-driver │ ├── files │ │ └── src │ │ │ ├── Makefile │ │ │ ├── com.siemens.iot2050.pxmt.conf │ │ │ ├── dbus-service.c │ │ │ ├── dbus-service.h │ │ │ ├── iot2050-proximity-driver.service │ │ │ ├── main.c │ │ │ ├── sensor.c │ │ │ └── sensor.h │ └── iot2050-proximity-driver_1.0.bb ├── lxde-touch │ ├── files │ │ └── postinst │ └── lxde-touch_0.1.bb ├── regen-rootfs-uuid │ ├── files │ │ ├── postinst │ │ ├── regen-rootfs-uuid-on-first-boot.service │ │ └── regen-rootfs-uuid.sh │ └── regen-rootfs-uuid_1.0.bb ├── swupdate-complete-update-helper │ ├── files │ │ └── complete_update.sh │ └── swupdate-complete-update-helper_0.1.bb ├── swupdate-config │ ├── files │ │ └── swupdate.cfg │ └── swupdate-config_%.bbappend └── watchdog │ ├── files │ └── 99-watchdog.conf │ └── iot2050-watchdog.bb ├── recipes-devtools ├── firmware-update-package │ ├── files │ │ ├── iot2050-generate-fwu-tarball.sh │ │ └── update.conf.json.tmpl │ └── firmware-update-package_0.1.bb ├── sbuild-chroot │ └── sbuild-chroot-target-npm.bb ├── secure-boot-secrets │ ├── files │ │ ├── custMpk.crt │ │ └── custMpk.pem │ └── secure-boot-custmpk_0.1.bb └── swupdate-certificates │ ├── files │ ├── custMpk.crt │ └── custMpk.pem │ ├── swupdate-certificates-custmpk_0.1.bb │ └── swupdate-certificates-key-custmpk_0.1.bb ├── recipes-initramfs └── iot2050-initramfs │ └── iot2050-initramfs_0.1.bb ├── recipes-kernel └── linux │ ├── files │ ├── iot2050-rt.cfg │ ├── iot2050_defconfig_base │ ├── iot2050_defconfig_extra.cfg │ ├── iot2050_defconfig_hailo.cfg │ ├── iot2050_defconfig_secure.cfg │ └── patches-6.1 │ │ ├── 0001-arm64-dts-ti-iot2050-Add-layout-of-OSPI-flash.patch │ │ ├── 0002-dt-bindings-arm-ti-Add-binding-for-Siemens-IOT2050-M.patch │ │ ├── 0003-arm64-dts-ti-iot2050-Add-support-for-M.2-variant.patch │ │ ├── 0004-arm64-dts-ti-k3-am65-Drop-bootargs.patch │ │ ├── 0005-arm64-dts-ti-k3-am65-iot-Fixup-reference-to-phandles.patch │ │ ├── 0006-arm64-dts-ti-Unify-pin-group-node-names-for-make-dtb.patch │ │ ├── 0007-arm64-dts-ti-k3-Fixup-remaining-pin-group-node-names.patch │ │ ├── 0008-dt-bindings-remoteproc-Add-PRU-consumer-bindings.patch │ │ ├── 0009-remoteproc-pru-Add-enum-for-PRU-Core-Identifiers.patch │ │ ├── 0010-remoteproc-pru-Add-APIs-to-get-and-put-the-PRU-cores.patch │ │ ├── 0011-remoteproc-pru-Make-sysfs-entries-read-only-for-PRU-.patch │ │ ├── 0012-remoteproc-pru-Add-pru_rproc_set_ctable-function.patch │ │ ├── 0013-remoteproc-pru-Configure-firmware-based-on-client-se.patch │ │ ├── 0014-dt-bindings-remoteproc-pru-Add-Interrupt-property.patch │ │ ├── 0015-soc-ti-pruss-Add-pruss_get-put-API.patch │ │ ├── 0016-soc-ti-pruss-Add-pruss_-request-release-_mem_region-.patch │ │ ├── 0017-soc-ti-pruss-Add-pruss_cfg_read-update-pruss_cfg_get.patch │ │ ├── 0018-soc-ti-pruss-Add-helper-functions-to-set-GPI-mode-MI.patch │ │ ├── 0019-remoteproc-pru-add-support-for-configuring-GPMUX-bas.patch │ │ ├── 0020-net-ti-icssg-prueth-Add-Firmware-Interface-for-ICSSG.patch │ │ ├── 0021-net-ti-icssg-prueth-Add-mii-helper-apis-and-macros.patch │ │ ├── 0022-net-ti-icssg-prueth-Add-Firmware-config-and-classifi.patch │ │ ├── 0023-net-ti-icssg-prueth-Add-icssg-queues-APIs-and-macros.patch │ │ ├── 0024-dt-bindings-net-Add-ICSSG-Ethernet.patch │ │ ├── 0025-net-ti-icssg-prueth-Add-ICSSG-ethernet-driver.patch │ │ ├── 0026-net-ti-icssg-prueth-Add-ICSSG-Stats.patch │ │ ├── 0027-net-ti-icssg-prueth-Add-Standard-network-staticstics.patch │ │ ├── 0028-net-ti-icssg-prueth-Add-ethtool-ops-for-ICSSG-Ethern.patch │ │ ├── 0029-net-ti-icssg-prueth-Add-Power-management-support.patch │ │ ├── 0030-dt-bindings-net-Add-ICSS-IEP.patch │ │ ├── 0031-dt-bindings-net-Add-IEP-property-in-ICSSG.patch │ │ ├── 0032-net-ti-icss-iep-Add-IEP-driver.patch │ │ ├── 0033-net-ti-icssg-prueth-add-packet-timestamping-and-ptp-.patch │ │ ├── 0034-net-ti-icssg-prueth-am65x-SR2.0-add-10M-full-duplex-.patch │ │ ├── 0035-dt-bindings-net-Add-documentation-for-Half-duplex-su.patch │ │ ├── 0036-net-ti-icssg-prueth-Add-support-for-half-duplex-oper.patch │ │ ├── 0037-net-ti-icssg-prueth-Add-phys_port_name-support.patch │ │ ├── 0038-dmaengine-ti-k3-udma-Add-system-suspend-resume-suppo.patch │ │ ├── 0039-dmaengine-ti-k3-udma-Fix-BCDMA-for-case-w-o-BCHAN.patch │ │ ├── 0040-soc-ti-k3-ringacc-remove-non-fatal-probe-deferral-lo.patch │ │ ├── 0041-dmaengine-ti-k3-udma-remove-non-fatal-probe-deferral.patch │ │ ├── 0042-mmc-sdhci_am654-Use-dev_err_probe-for-mmc_of_parse-r.patch │ │ ├── 0043-mmc-sdhci_am654-Add-support-for-PM-suspend-resume.patch │ │ ├── 0044-dt-bindings-watchdog-ti-rti-wdt-Add-support-for-WDIO.patch │ │ ├── 0045-watchdog-rit_wdt-Add-support-for-WDIOF_CARDRESET.patch │ │ ├── 0046-arm64-dts-ti-Add-reserved-memory-for-watchdog.patch │ │ ├── 0047-arm64-dts-ti-k3-am65-main-Add-ICSSG-IEP-nodes.patch │ │ ├── 0048-irqchip-irq-pruss-intc-Fix-enabling-of-intc-events.patch │ │ ├── 0049-irqchip-irq-pruss-intc-Fix-listed-IRQ-type-in-proc-i.patch │ │ ├── 0050-irqchip-irq-pruss-intc-Fix-processing-of-IEP-interru.patch │ │ ├── 0051-arm64-dts-ti-k3-am65-main-Add-PRU-system-events-for-.patch │ │ ├── 0052-dmaengine-ti-k3-udma-glue-do-not-create-glue-dma-dev.patch │ │ ├── 0053-tee-optee-Fix-supplicant-based-device-enumeration.patch │ │ ├── 0054-efivarfs-expose-used-and-total-size.patch │ │ ├── 0055-efi-efivars-drop-kobject-from-efivars_register.patch │ │ ├── 0056-efi-expose-efivar-generic-ops-register-function.patch │ │ ├── 0057-efi-Add-EFI_ACCESS_DENIED-status-code.patch │ │ ├── 0058-efi-Add-tee-based-EFI-variable-driver.patch │ │ ├── 0059-mmc-sdhci_am654-Disable-data-error-interrupts-while-.patch │ │ ├── 0060-PCI-keystone-Convert-to-using-hierarchy-domain-for-l.patch │ │ ├── 0061-PCI-keystone-Add-PCI-legacy-interrupt-support-for-AM.patch │ │ ├── 0062-arm64-dts-ti-k3-am65-main-Add-properties-to-support-.patch │ │ ├── 0063-firmware-ti_sci-Update-ti_sci_msg_req_reboot-to-incl.patch │ │ ├── 0064-net-ti-icssg-prueth-Add-missing-icss_iep_put-to-erro.patch │ │ ├── 0065-net-ti-icssg-prueth-Fix-error-cleanup-on-failing-pru.patch │ │ ├── 0066-arm64-dts-ti-iot2050-Drop-unused-ecap0-PWM.patch │ │ ├── 0067-arm64-dts-ti-iot2050-Definitions-for-runtime-pinmuxi.patch │ │ ├── 0068-arm64-dts-ti-iot2050-Refactor-the-m.2-and-minipcie-p.patch │ │ ├── 0069-arm64-dts-ti-iot2050-Add-icssg-prueth-nodes-for-PG2-.patch │ │ ├── 0070-WIP-arm64-dts-ti-iot2050-Add-node-for-generic-spidev.patch │ │ ├── 0071-arm64-dts-ti-Indicate-the-green-light-is-off-when-pa.patch │ │ ├── 0072-HACK-setting-the-RJ45-port-led-behavior.patch │ │ ├── 0073-WIP-feat-extend-led-panic-indicator-on-and-off.patch │ │ ├── 0074-arm64-dts-ti-iot2050-Disable-R5-lockstep-for-all-PG2.patch │ │ ├── 0075-arm64-dts-ti-iot2050-Factor-out-arduino-connector-bi.patch │ │ ├── 0076-dt-bindings-arm-ti-Add-binding-for-Siemens-IOT2050-S.patch │ │ ├── 0077-dts-iot2050-Support-IOT2050-SM-variant.patch │ │ ├── 0078-WIP-dts-iot2050-Add-spidev-for-IOT2050-SM.patch │ │ ├── 0079-net-ti-icssg-config-add-SR1.0-specific-configuration.patch │ │ ├── 0080-net-ti-icssg-prueth-add-SR1.0-specific-configuration.patch │ │ ├── 0081-net-ti-icssg-classifier-Add-support-for-SR1.0.patch │ │ ├── 0082-net-ti-icssg-config-Add-SR1.0-configuration-function.patch │ │ ├── 0083-net-ti-icssg-ethtool-Adjust-channel-count-for-SR1.0.patch │ │ ├── 0084-net-ti-iccsg-prueth-Add-necessary-functions-for-SR1..patch │ │ ├── 0085-net-ti-icssg-prueth-Wire-up-support-for-SR1.0.patch │ │ ├── 0086-net-ti-icss_iep-Add-SR1-support.patch │ │ ├── 0087-arm64-dts-ti-iot2050-Add-icssg-prueth-nodes-for-PG1-.patch │ │ ├── 0088-arm64-dts-ti-iot2050-Disable-lock-step-for-all-iot20.patch │ │ ├── 0089-dt-bindings-soc-ti-Add-AM65-peripheral-virtualizatio.patch │ │ ├── 0090-soc-ti-Add-IOMPU-like-PVU-driver.patch │ │ ├── 0091-dt-bindings-PCI-ti-am65-Extend-for-use-with-PVU.patch │ │ ├── 0092-arm64-dts-ti-k3-am65-main-Add-VMAP-registers-to-PCI-.patch │ │ ├── 0093-PCI-keystone-Add-supported-for-PVU-based-DMA-isolati.patch │ │ ├── 0094-arm64-dts-ti-iot2050-Enforce-DMA-isolation-for-devic.patch │ │ ├── 0095-swiotlb-Make-IO_TLB_SEGSIZE-configurable.patch │ │ ├── 0096-arm64-dts-ti-iot2050-Add-support-for-dts-overlay-for.patch │ │ └── 0097-spi-cadence-qspi-Workaround-potential-flash-writing-.patch │ ├── linux-iot2050-6.1.inc │ ├── linux-iot2050-rt_6.1.134-cip41-rt22.bb │ ├── linux-iot2050_6.1.134-cip41.bb │ └── linux-iot2050_6.x-upstream.bb ├── start-qemu-iot2050.sh └── wic ├── iot2050-swu-secure.wks.in ├── iot2050-swu.wks.in └── iot2050.wks.in /.github/workflows/free-disk-space/action.yml: -------------------------------------------------------------------------------- 1 | name: 'Free Disk Space' 2 | description: 'Remove content of the provided image to free disk space for the build' 3 | runs: 4 | using: "composite" 5 | steps: 6 | - name: Free disk space 7 | run: | 8 | sudo apt-get purge 'dotnet*' google-chrome-stable 'temurin*' google-cloud-cli azure-cli 'mongodb*' powershell firefox chromium 'llvm*' 'libllvm*' 'mysql*' libgl1-mesa-dri apache2 'mono*' 'swift*' microsoft-edge-stable default-jre-headless 'aspnetcore*' 9 | sudo rm -rf /usr/local/* /opt/hostedtoolcache /opt/pipx* /opt/az 10 | shell: bash 11 | - name: Show disk space usage 12 | run: df -h 13 | shell: bash 14 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | build/ 2 | isar/ 3 | /cip-core 4 | recipes-core/customizations-base/local.inc 5 | .config.yaml* 6 | .kas_shell_history 7 | -------------------------------------------------------------------------------- /.gitlab-ci.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) Siemens AG, 2020-2024 3 | # 4 | # Authors: 5 | # Jan Kiszka 6 | # 7 | # This file is subject to the terms and conditions of the MIT License. See 8 | # COPYING.MIT file in the top-level directory. 9 | # 10 | 11 | image: ghcr.io/siemens/kas/kas-isar:4.4 12 | 13 | variables: 14 | GIT_STRATEGY: clone 15 | 16 | all: 17 | stage: build 18 | script: 19 | - export http_proxy=$HTTP_PROXY 20 | - export https_proxy=$HTTPS_PROXY 21 | - export ftp_proxy=$FTP_PROXY 22 | - export no_proxy=$NO_PROXY 23 | 24 | - kas build kas-iot2050-example.yml 25 | - kas build kas-iot2050-example.yml:kas/opt/preempt-rt.yml 26 | - kas build kas-iot2050-swupdate.yml 27 | - sudo rm -rf build/tmp 28 | - kas build kas-iot2050-boot.yml 29 | -------------------------------------------------------------------------------- /COPYING.MIT: -------------------------------------------------------------------------------- 1 | Permission is hereby granted, free of charge, to any person obtaining a copy 2 | of this software and associated documentation files (the "Software"), to deal 3 | in the Software without restriction, including without limitation the rights 4 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 5 | copies of the Software, and to permit persons to whom the Software is 6 | furnished to do so, subject to the following conditions: 7 | 8 | The above copyright notice and this permission notice shall be included in 9 | all copies or substantial portions of the Software. 10 | 11 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 12 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 13 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 14 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 15 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 16 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 17 | THE SOFTWARE. -------------------------------------------------------------------------------- /MAINTAINERS: -------------------------------------------------------------------------------- 1 | Meta IOT2050 2 | M: Jan Kiszka 3 | M: Bao Chengsu 4 | M: Le Jin 5 | M: Li Hua Qian 6 | 7 | -------------------------------------------------------------------------------- /classes/git-timestamp.bbclass: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) Siemens AG, 2025 3 | # 4 | # Authors: 5 | # Li Hua Qian 6 | # 7 | # This file is subject to the terms and conditions of the MIT License. See 8 | # COPYING.MIT file in the top-level directory. 9 | # 10 | 11 | def get_git_tag_timestamp(d): 12 | import subprocess 13 | layerdir = d.getVar('LAYERDIR_meta-iot2050') 14 | try: 15 | result = subprocess.check_output( 16 | ['git', '-C', layerdir, 'for-each-ref', '--sort=-creatordate', 17 | '--format=%(creatordate:unix)', 'refs/tags/V*'], 18 | universal_newlines=True 19 | ).strip() 20 | return result.splitlines()[0] if result else '0' 21 | except Exception as e: 22 | bb.warn(f"Failed to get Git tag timestamp: {e}") 23 | return '0' 24 | -------------------------------------------------------------------------------- /classes/node-red-module.bbclass: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) Siemens AG, 2023 3 | # 4 | # Authors: 5 | # Felix Moessbauer 6 | # 7 | # This file is subject to the terms and conditions of the MIT License. See 8 | # COPYING.MIT file in the top-level directory. 9 | # 10 | 11 | require recipes-app/node-red/node-red-home.inc 12 | 13 | # common setting for all node-red-contrib modules 14 | DEBIAN_DEPENDS .= ", node-red" 15 | RDEPENDS += "node-red" 16 | 17 | # We need to explicitly set this directory to vendor the dependencies instead 18 | # of using NPMs "global" pattern that shares the dependencies. 19 | # This is required, because we do not model all transitive dependencies as 20 | # as individual debian packages. Modelling all transitive dependencies as 21 | # debian packages is not feasable from a maintenance point of view. 22 | NPM_LOCAL_INSTALL_DIR ?= "/usr/lib" 23 | -------------------------------------------------------------------------------- /conf/layer.conf: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) Siemens AG, 2019 3 | # 4 | # Authors: 5 | # Le Jin 6 | # 7 | # This file is subject to the terms and conditions of the MIT License. See 8 | # COPYING.MIT file in the top-level directory. 9 | # 10 | 11 | BBPATH .= ":${LAYERDIR}" 12 | 13 | BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \ 14 | ${LAYERDIR}/recipes-*/*/*.bbappend" 15 | 16 | BBFILE_COLLECTIONS += "meta-iot2050" 17 | BBFILE_PATTERN_meta-iot2050 = "^${LAYERDIR}/recipes-" 18 | BBFILE_PRIORITY_meta-iot2050 = "6" 19 | 20 | LAYERSERIES_COMPAT_meta-iot2050 = "next" 21 | 22 | LAYERDIR_meta-iot2050 = "${LAYERDIR}" 23 | LAYERDIR_meta-iot2050[vardepvalue] = "meta-iot2050" 24 | 25 | ISAR_RELEASE_CMD = "git -C ${LAYERDIR_meta-iot2050} describe --long --tags --dirty --always || echo unknown" 26 | 27 | require classes/git-timestamp.bbclass 28 | SOURCE_DATE_EPOCH = "${@get_git_tag_timestamp(d)}" 29 | -------------------------------------------------------------------------------- /conf/machine/iot2050-qemu.conf: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) Siemens AG, 2023 3 | # 4 | # Authors: 5 | # Enes Colpan 6 | # 7 | # This file is subject to the terms and conditions of the MIT License. See 8 | # COPYING.MIT file in the top-level directory. 9 | # 10 | 11 | require conf/machine/iot2050.conf 12 | 13 | DTB_FILES = "" 14 | 15 | CONSOLE_KERNEL_PARAMS = "" 16 | 17 | QEMU_IMAGE = "1" 18 | 19 | PREFERRED_PROVIDER_u-boot-${MACHINE} = "u-boot-qemu-arm64" 20 | -------------------------------------------------------------------------------- /conf/machine/iot2050.conf: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) Siemens AG, 2019-2023 3 | # 4 | # Authors: 5 | # Le Jin 6 | # Su Baocheng 7 | # 8 | # This file is subject to the terms and conditions of the MIT License. See 9 | # COPYING.MIT file in the top-level directory. 10 | # 11 | 12 | DISTRO_ARCH ?= "arm64" 13 | 14 | PREFERRED_PROVIDER_u-boot-${MACHINE} ?= "u-boot-iot2050" 15 | PREFERRED_PROVIDER_u-boot-${MACHINE}-config ?= "u-boot-iot2050" 16 | 17 | KERNEL_NAME ?= "iot2050" 18 | DTB_FILES ?= " \ 19 | ti/k3-am6528-iot2050-basic.dtb \ 20 | ti/k3-am6528-iot2050-basic-pg2.dtb \ 21 | ti/k3-am6548-iot2050-advanced.dtb \ 22 | ti/k3-am6548-iot2050-advanced-pg2.dtb \ 23 | ti/k3-am6548-iot2050-advanced-m2.dtb \ 24 | ti/k3-am6548-iot2050-advanced-sm.dtb \ 25 | " 26 | 27 | IMAGE_FSTYPES ?= "wic" 28 | WKS_FILE ?= "iot2050.wks.in" 29 | 30 | IMAGE_INSTALL += "u-boot-script" 31 | 32 | # only relevant for SWUpdate image 33 | SWUPDATE_BOOTLOADER = "efibootguard" 34 | 35 | CONSOLE_KERNEL_PARAMS ?= "console=ttyS3,115200n8 earlycon=ns16550a,mmio32,0x02810000" 36 | -------------------------------------------------------------------------------- /kas-docker: -------------------------------------------------------------------------------- 1 | kas-container -------------------------------------------------------------------------------- /kas-iot2050-boot.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) Siemens AG, 2019-2023 3 | # 4 | # Authors: 5 | # Le Jin 6 | # Jan Kiszka 7 | # 8 | # This file is subject to the terms and conditions of the MIT License. See 9 | # COPYING.MIT file in the top-level directory. 10 | # 11 | 12 | header: 13 | version: 14 14 | includes: 15 | - kas/iot2050.yml 16 | 17 | build_system: isar 18 | 19 | target: u-boot-iot2050 20 | -------------------------------------------------------------------------------- /kas-iot2050-example.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) Siemens AG, 2019 3 | # 4 | # Authors: 5 | # Le Jin 6 | # 7 | # This file is subject to the terms and conditions of the MIT License. See 8 | # COPYING.MIT file in the top-level directory. 9 | # 10 | 11 | header: 12 | version: 14 13 | includes: 14 | - kas/iot2050.yml 15 | 16 | build_system: isar 17 | 18 | target: iot2050-image-example 19 | 20 | local_conf_header: 21 | root_password: | 22 | USERS += "root" 23 | USER_root[password] ??= "root" 24 | USER_root[flags] ??= "clear-text-password force-passwd-change" 25 | -------------------------------------------------------------------------------- /kas-iot2050-fwu-package.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) Siemens AG, 2023 3 | # 4 | # Authors: 5 | # Li Hua Qian 6 | # 7 | # This file is subject to the terms and conditions of the MIT License. See 8 | # COPYING.MIT file in the top-level directory. 9 | # 10 | 11 | header: 12 | version: 10 13 | includes: 14 | - kas/iot2050.yml 15 | 16 | build_system: isar 17 | 18 | target: firmware-update-package 19 | -------------------------------------------------------------------------------- /kas-iot2050-qemu.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) Siemens AG, 2023 3 | # 4 | # This file is subject to the terms and conditions of the MIT License. See 5 | # COPYING.MIT file in the top-level directory. 6 | # 7 | 8 | header: 9 | version: 14 10 | 11 | machine: iot2050-qemu 12 | 13 | local_conf_header: 14 | firmware-binaries: | 15 | # Add U-Boot for qemu 16 | IMAGER_BUILD_DEPS:append:iot2050-qemu = " u-boot-iot2050-qemu" 17 | -------------------------------------------------------------------------------- /kas-iot2050-swupdate.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) Siemens AG, 2021 3 | # 4 | # This file is subject to the terms and conditions of the MIT License. See 5 | # COPYING.MIT file in the top-level directory. 6 | # 7 | 8 | header: 9 | version: 14 10 | includes: 11 | - kas-iot2050-example.yml 12 | 13 | build_system: isar 14 | 15 | target: iot2050-image-swu-example 16 | -------------------------------------------------------------------------------- /kas/iot2050.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) Siemens AG, 2019-2024 3 | # 4 | # Authors: 5 | # Le Jin 6 | # 7 | # This file is subject to the terms and conditions of the MIT License. See 8 | # COPYING.MIT file in the top-level directory. 9 | # 10 | 11 | header: 12 | version: 14 13 | 14 | build_system: isar 15 | 16 | distro: iot2050-debian 17 | target: iot2050-image-base 18 | machine: iot2050 19 | 20 | defaults: 21 | repos: 22 | patches: 23 | repo: meta-iot2050 24 | 25 | repos: 26 | meta-iot2050: 27 | layers: 28 | .: 29 | 30 | isar: 31 | url: https://github.com/ilbers/isar 32 | commit: 938dab363006529f0b5296dfbc09ef306fc8c3d7 33 | layers: 34 | meta: 35 | 36 | cip-core: 37 | url: https://gitlab.com/cip-project/cip-core/isar-cip-core.git 38 | commit: 8a1e4f0b1e699f7bef02c1ddbee90daa08efc32d 39 | 40 | local_conf_header: 41 | standard: | 42 | CONF_VERSION = "1" 43 | crossbuild: | 44 | ISAR_CROSS_COMPILE = "1" 45 | ccache: 46 | USE_CCACHE = "1" 47 | compatsupport: | 48 | ISAR_ENABLE_COMPAT_ARCH = "1" 49 | -------------------------------------------------------------------------------- /kas/opt/debian-mirror.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) Siemens AG, 2019-2022 3 | # 4 | # Authors: 5 | # Le Jin 6 | # Jan Kiszka 7 | # 8 | # This file is subject to the terms and conditions of the MIT License. See 9 | # COPYING.MIT file in the top-level directory. 10 | # 11 | 12 | header: 13 | version: 14 14 | 15 | local_conf_header: 16 | debian-mirror: | 17 | DEBIAN_MIRROR_URL ?= "http://ftp.de.debian.org" 18 | DISTRO_APT_PREMIRRORS = "\ 19 | http://deb\.debian\.org ${DEBIAN_MIRROR_URL}\n" 20 | -------------------------------------------------------------------------------- /kas/opt/docker.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) Siemens AG, 2022 3 | # 4 | # Authors: 5 | # Chao Zeng 6 | # 7 | # This file is subject to the terms and conditions of the MIT License. See 8 | # COPYING.MIT file in the top-level directory. 9 | # 10 | 11 | header: 12 | version: 14 13 | 14 | local_conf_header: 15 | docker-support: | 16 | IOT2050_DOCKER_SUPPORT = "1" 17 | -------------------------------------------------------------------------------- /kas/opt/eio.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) Siemens AG, 2023 3 | # 4 | # Authors: 5 | # Baocheng Su 6 | # 7 | # This file is subject to the terms and conditions of the MIT License. See 8 | # COPYING.MIT file in the top-level directory. 9 | # 10 | 11 | header: 12 | version: 14 13 | 14 | local_conf_header: 15 | eio: | 16 | IOT2050_EIO_SUPPORT = "1" 17 | -------------------------------------------------------------------------------- /kas/opt/lxde.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) Siemens AG, 2022 3 | # 4 | # Authors: 5 | # Jan Kiszka 6 | # 7 | # This file is subject to the terms and conditions of the MIT License. See 8 | # COPYING.MIT file in the top-level directory. 9 | # 10 | 11 | header: 12 | version: 14 13 | 14 | local_conf_header: 15 | add-lxde: | 16 | IMAGE_INSTALL += "lxde-touch" 17 | -------------------------------------------------------------------------------- /kas/opt/meta-hailo.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) Siemens AG, 2024 3 | # 4 | # Authors: 5 | # Li Hua Qian 6 | # 7 | # This file is subject to the terms and conditions of the MIT License. See 8 | # COPYING.MIT file in the top-level directory. 9 | # 10 | 11 | header: 12 | version: 15 13 | 14 | local_conf_header: 15 | hailo: | 16 | IOT2050_META_HAILO = "1" 17 | hailo_override: | 18 | OVERRIDES .= ":meta-hailo" 19 | 20 | repos: 21 | meta-iot2050: 22 | layers: 23 | meta-hailo: 24 | -------------------------------------------------------------------------------- /kas/opt/module.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) Siemens AG, 2024 3 | # 4 | # Authors: 5 | # Li Hua Qian 6 | # 7 | # This file is subject to the terms and conditions of the MIT License. See 8 | # COPYING.MIT file in the top-level directory. 9 | # 10 | 11 | header: 12 | version: 14 13 | 14 | local_conf_header: 15 | module: | 16 | IOT2050_MODULE_FWU = "1" 17 | -------------------------------------------------------------------------------- /kas/opt/no-node-red.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) Siemens AG, 2023 3 | # 4 | # Authors: 5 | # Jan Kiszka 6 | # 7 | # This file is subject to the terms and conditions of the MIT License. See 8 | # COPYING.MIT file in the top-level directory. 9 | # 10 | 11 | header: 12 | version: 14 13 | 14 | local_conf_header: 15 | no-node-red: | 16 | IOT2050_NODE_RED_SUPPORT = "0" 17 | -------------------------------------------------------------------------------- /kas/opt/otpcmd/key-provision-3keys.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) Siemens AG, 2022 3 | # 4 | # Authors: 5 | # Su Bao Cheng 6 | # 7 | # This file is subject to the terms and conditions of the MIT License. See 8 | # COPYING.MIT file in the top-level directory. 9 | # 10 | 11 | header: 12 | version: 14 13 | includes: 14 | - otp.yml 15 | 16 | local_conf_header: 17 | key-provision-3keys: | 18 | OTP_BMPK = "./keys/custBmpk.pem" 19 | OTPCMD_ITS ?= "its/key-provision-3keys.its" 20 | -------------------------------------------------------------------------------- /kas/opt/otpcmd/key-provision-enabling-only.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) Siemens AG, 2022 3 | # 4 | # Authors: 5 | # Su Bao Cheng 6 | # 7 | # This file is subject to the terms and conditions of the MIT License. See 8 | # COPYING.MIT file in the top-level directory. 9 | # 10 | 11 | header: 12 | version: 14 13 | includes: 14 | - otp.yml 15 | 16 | local_conf_header: 17 | key-provision-enabling-only: | 18 | OTPCMD_ITS ?= "its/key-provision-enabling-only.its" 19 | -------------------------------------------------------------------------------- /kas/opt/otpcmd/key-provision-keys-only.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) Siemens AG, 2022 3 | # 4 | # Authors: 5 | # Su Bao Cheng 6 | # 7 | # This file is subject to the terms and conditions of the MIT License. See 8 | # COPYING.MIT file in the top-level directory. 9 | # 10 | 11 | header: 12 | version: 14 13 | includes: 14 | - otp.yml 15 | 16 | local_conf_header: 17 | key-provision-keys-only: | 18 | OTPCMD_ITS ?= "its/key-provision-keys-only.its" 19 | -------------------------------------------------------------------------------- /kas/opt/otpcmd/key-provision.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) Siemens AG, 2022 3 | # 4 | # Authors: 5 | # Su Bao Cheng 6 | # 7 | # This file is subject to the terms and conditions of the MIT License. See 8 | # COPYING.MIT file in the top-level directory. 9 | # 10 | 11 | header: 12 | version: 14 13 | includes: 14 | - otp.yml 15 | -------------------------------------------------------------------------------- /kas/opt/otpcmd/key-switch-2to3.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) Siemens AG, 2022 3 | # 4 | # Authors: 5 | # Su Bao Cheng 6 | # 7 | # This file is subject to the terms and conditions of the MIT License. See 8 | # COPYING.MIT file in the top-level directory. 9 | # 10 | 11 | header: 12 | version: 14 13 | includes: 14 | - key-switch.yml 15 | 16 | local_conf_header: 17 | key-switch-2to3: | 18 | OTP_MPK = "" 19 | OTP_SMPK = "./keys/custSmpk.pem" 20 | OTP_BMPK = "./keys/custBmpk.pem" 21 | -------------------------------------------------------------------------------- /kas/opt/otpcmd/key-switch.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) Siemens AG, 2022 3 | # 4 | # Authors: 5 | # Su Bao Cheng 6 | # 7 | # This file is subject to the terms and conditions of the MIT License. See 8 | # COPYING.MIT file in the top-level directory. 9 | # 10 | 11 | header: 12 | version: 14 13 | includes: 14 | - otp.yml 15 | 16 | local_conf_header: 17 | key-switch: | 18 | OTPCMD_MODE = "switch" 19 | -------------------------------------------------------------------------------- /kas/opt/otpcmd/otp.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) Siemens AG, 2022 3 | # 4 | # Authors: 5 | # Su Bao Cheng 6 | # 7 | # This file is subject to the terms and conditions of the MIT License. See 8 | # COPYING.MIT file in the top-level directory. 9 | # 10 | 11 | header: 12 | version: 14 13 | 14 | local_conf_header: 15 | otpcmd_override: | 16 | OVERRIDES .= ":otpcmd" 17 | -------------------------------------------------------------------------------- /kas/opt/package-lock.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) Siemens AG, 2019-2024 3 | # 4 | # Authors: 5 | # Su Bao Cheng 6 | # 7 | # This file is subject to the terms and conditions of the MIT License. See 8 | # COPYING.MIT file in the top-level directory. 9 | # 10 | 11 | header: 12 | version: 14 13 | 14 | local_conf_header: 15 | package-lock: | 16 | # 2025-05-15 02:38:07 UTC 17 | ISAR_APT_SNAPSHOT_TIMESTAMP = "1747247887" 18 | ISAR_USE_APT_SNAPSHOT = "1" 19 | -------------------------------------------------------------------------------- /kas/opt/preempt-rt.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) Siemens AG, 2018 3 | # 4 | # This file is subject to the terms and conditions of the MIT License. See 5 | # COPYING.MIT file in the top-level directory. 6 | # 7 | 8 | header: 9 | version: 14 10 | 11 | local_conf_header: 12 | preempt-rt: | 13 | KERNEL_NAME = "iot2050-rt" 14 | -------------------------------------------------------------------------------- /kas/opt/rpmb-setup.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) Siemens AG, 2022 3 | # 4 | # Authors: 5 | # Ivan Mikhaylov 6 | # 7 | # This file is subject to the terms and conditions of the MIT License. See 8 | # COPYING.MIT file in the top-level directory. 9 | # 10 | 11 | header: 12 | version: 14 13 | 14 | local_conf_header: 15 | optee-os-iot2050_override: | 16 | OVERRIDES .= ":uefi-stmm" 17 | OVERRIDES .= ":rpmb-setup" 18 | -------------------------------------------------------------------------------- /kas/opt/sdk.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) Siemens AG, 2018 3 | # 4 | # This file is subject to the terms and conditions of the MIT License. See 5 | # COPYING.MIT file in the top-level directory. 6 | # 7 | 8 | header: 9 | version: 14 10 | 11 | task: populate_sdk 12 | -------------------------------------------------------------------------------- /kas/opt/secure-boot.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) Siemens AG, 2022 3 | # 4 | # This file is subject to the terms and conditions of the MIT License. See 5 | # COPYING.MIT file in the top-level directory. 6 | # 7 | 8 | header: 9 | version: 14 10 | 11 | local_conf_header: 12 | secureboot_override: | 13 | OVERRIDES .= ":uefi-stmm" 14 | OVERRIDES .= ":secureboot" 15 | secure-boot-signer: | 16 | IMAGER_BUILD_DEPS += "ebg-secure-boot-signer" 17 | IMAGER_INSTALL += "ebg-secure-boot-signer" 18 | secure-boot-fw-ver: | 19 | FIRMWARE_SECURE_VER ?= "0" 20 | -------------------------------------------------------------------------------- /kas/opt/upstream.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) Siemens AG, 2020-2023 3 | # 4 | # This file is subject to the terms and conditions of the MIT License. See 5 | # COPYING.MIT file in the top-level directory. 6 | # 7 | 8 | header: 9 | version: 14 10 | 11 | local_conf_header: 12 | upstream-versions: | 13 | BBMASK:remove = "linux-iot2050_.+-upstream\.bb" 14 | PREFERRED_VERSION_linux-iot2050 = "6.x-upstream" 15 | -------------------------------------------------------------------------------- /meta-hailo/MAINTAINERS.md: -------------------------------------------------------------------------------- 1 | # Maintainers 2 | 3 | - Li Hua Qian 4 | -------------------------------------------------------------------------------- /meta-hailo/conf/layer.conf: -------------------------------------------------------------------------------- 1 | # SPDX-FileCopyrightText: Copyright 2023-2024 Siemens AG 2 | # SPDX-License-Identifier: MIT 3 | BBPATH .= ":${LAYERDIR}" 4 | 5 | BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \ 6 | ${LAYERDIR}/recipes-*/*/*.bbappend" 7 | 8 | BBFILE_COLLECTIONS += "hailo" 9 | BBFILE_PATTERN_hailo = "^${LAYERDIR}/recipes-" 10 | BBFILE_PRIORITY_hailo = "6" 11 | LAYERVERSION_hailo = "3" 12 | 13 | LAYERSERIES_COMPAT_hailo = "next" 14 | 15 | LAYERDIR_hailo = "${LAYERDIR}" 16 | -------------------------------------------------------------------------------- /meta-hailo/recipes-app/hailort/files/debian/hailort.install: -------------------------------------------------------------------------------- 1 | etc/default/hailort_service 2 | usr/bin/hailort_service 3 | # erronous upstream install path, fix here 4 | usr/usr/share/bash-completion/completions/hailortcli usr/share/bash-completion/completions/ 5 | debian/python-numpy.pref etc/apt/preferences.d/ 6 | -------------------------------------------------------------------------------- /meta-hailo/recipes-app/hailort/files/debian/hailort.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=HailoRT service 3 | Documentation=https://github.com/hailo-ai/hailort 4 | 5 | [Service] 6 | Type=forking 7 | EnvironmentFile=/etc/default/hailort_service 8 | ExecStart=/usr/bin/hailort_service 9 | Restart=on-failure 10 | RemainAfterExit=yes 11 | PIDFile=/run/hailo/hailort_service.pid 12 | ExecReload=/bin/kill -HUP $MAINPID 13 | ExecStartPost=/bin/sleep 0.1 14 | 15 | [Install] 16 | WantedBy=multi-user.target 17 | -------------------------------------------------------------------------------- /meta-hailo/recipes-app/hailort/files/debian/hailortcli.install: -------------------------------------------------------------------------------- 1 | usr/bin/hailortcli 2 | -------------------------------------------------------------------------------- /meta-hailo/recipes-app/hailort/files/debian/libgsthailo-dev.install: -------------------------------------------------------------------------------- 1 | usr/include/gstreamer-1.0/gst/hailo/tensor_meta.hpp -------------------------------------------------------------------------------- /meta-hailo/recipes-app/hailort/files/debian/libgsthailo.install: -------------------------------------------------------------------------------- 1 | usr/lib/${DEB_HOST_MULTIARCH}/libgsthailo.so /usr/lib/${DEB_HOST_MULTIARCH}/gstreamer-1.0/ -------------------------------------------------------------------------------- /meta-hailo/recipes-app/hailort/files/debian/libhailort-dev.install: -------------------------------------------------------------------------------- 1 | usr/include/hailo 2 | usr/lib/*/libhailort.so 3 | usr/lib/*/cmake/HailoRT 4 | -------------------------------------------------------------------------------- /meta-hailo/recipes-app/hailort/files/debian/libhailort.install: -------------------------------------------------------------------------------- 1 | usr/lib/${DEB_HOST_MULTIARCH}/libhailort.so.* 2 | -------------------------------------------------------------------------------- /meta-hailo/recipes-app/hailort/files/debian/not-installed: -------------------------------------------------------------------------------- 1 | usr/bin/hailo 2 | usr/lib/systemd/system/hailort.service 3 | usr/lib/python3.*/dist-packages/hailo_tutorials/* 4 | -------------------------------------------------------------------------------- /meta-hailo/recipes-app/hailort/files/debian/python-numpy.pref: -------------------------------------------------------------------------------- 1 | Package: python3-numpy 2 | Pin: version 1.23.3 3 | Pin-Priority: 1001 4 | -------------------------------------------------------------------------------- /meta-hailo/recipes-app/hailort/files/debian/python3-hailort.install: -------------------------------------------------------------------------------- 1 | usr/lib/python3*/dist-packages/hailort-*.egg-info 2 | usr/lib/python3*/dist-packages/hailo_platform 3 | -------------------------------------------------------------------------------- /meta-hailo/recipes-app/hailort/files/debian/rules: -------------------------------------------------------------------------------- 1 | #!/usr/bin/make -f 2 | 3 | export DEB_BUILD_MAINT_OPTIONS=hardening=+all 4 | 5 | %: 6 | dh $@ --with python3 7 | 8 | ifeq ($(DEB_HOST_ARCH),arm64) 9 | CMAKE_TOOLCHAIN_FILE := $(CURDIR)/hailort/libhailort/cmake/toolchains/linux.aarch64.cmake 10 | endif 11 | 12 | override_dh_auto_configure: 13 | dh_auto_configure --buildsystem=pybuild --sourcedir=hailort/libhailort/bindings/python/platform 14 | dh_auto_configure --buildsystem=cmake -- \ 15 | -DHAILO_BUILD_SERVICE=ON \ 16 | -DHAILO_BUILD_GSTREAMER=ON \ 17 | -DCMAKE_BUILD_TYPE=Release 18 | 19 | override_dh_auto_build: 20 | CMAKE_TOOLCHAIN_FILE=$(CMAKE_TOOLCHAIN_FILE) \ 21 | dh_auto_build --buildsystem=pybuild --sourcedir=hailort/libhailort/bindings/python/platform 22 | dh_auto_build --buildsystem=cmake 23 | 24 | override_dh_auto_install: 25 | CMAKE_TOOLCHAIN_FILE=$(CMAKE_TOOLCHAIN_FILE) \ 26 | dh_auto_install --buildsystem=pybuild --sourcedirectory=hailort/libhailort/bindings/python/platform 27 | dh_auto_install --buildsystem=cmake 28 | -------------------------------------------------------------------------------- /meta-hailo/recipes-app/tappas/detection_pipeline.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siemens/meta-iot2050/825b467d76be531d2ddb9e71455365307ce2680e/meta-hailo/recipes-app/tappas/detection_pipeline.gif -------------------------------------------------------------------------------- /meta-hailo/recipes-app/tappas/files/debian/control: -------------------------------------------------------------------------------- 1 | Source: tappas 2 | Maintainer: Li Hua Qian 3 | Section: devel 4 | Priority: optional 5 | Standards-Version: 4.6.1 6 | Build-Depends: 7 | debhelper-compat (= 13), 8 | meson, 9 | ninja-build, 10 | pkg-config, 11 | gstreamer1.0-tools, 12 | libgstreamer1.0-dev, 13 | gstreamer1.0-plugins-base, 14 | libgstreamer-plugins-base1.0-dev, 15 | libopencv-dev, 16 | libcxxopts-dev, 17 | rapidjson-dev, 18 | xtl-dev:all, 19 | xtensor-dev:all, 20 | libglib2.0-dev, 21 | cppzmq-dev, 22 | libzmq3-dev, 23 | libhailort-dev, 24 | libgsthailo-dev, 25 | procps 26 | 27 | Package: libgsthailotools 28 | Architecture: any 29 | Multi-Arch: foreign 30 | Description: GStreamer tools for Hailo 31 | Depends: 32 | libhailort-dev, 33 | ${misc:Depends}, 34 | ${shlibs:Depends} 35 | 36 | Package: tappas-apps 37 | Architecture: any 38 | Multi-Arch: foreign 39 | Description: Tappas applications for Hailo 40 | Depends: 41 | bash, 42 | libgsthailotools, 43 | gstreamer1.0-tools, 44 | gstreamer1.0-plugins-base, 45 | gstreamer1.0-plugins-good, 46 | gstreamer1.0-plugins-bad, 47 | ${misc:Depends}, 48 | ${shlibs:Depends} 49 | 50 | Package: hailo-post-processes 51 | Architecture: any 52 | Multi-Arch: foreign 53 | Description: Post-processing tools for Hailo 54 | Depends: 55 | libgsthailotools, 56 | ${misc:Depends}, 57 | ${shlibs:Depends} 58 | 59 | Package: tappas-tracers 60 | Architecture: any 61 | Multi-Arch: foreign 62 | Description: Tracing tools for Tappas 63 | Depends: 64 | ${misc:Depends}, 65 | ${shlibs:Depends} 66 | -------------------------------------------------------------------------------- /meta-hailo/recipes-app/tappas/files/debian/hailo-post-processes.install: -------------------------------------------------------------------------------- 1 | usr/lib/hailo-post-processes/* 2 | usr/lib/hailo-post-processes/cropping_algorithms/* 3 | usr/lib/hailo-post-processes/post_processes_data -------------------------------------------------------------------------------- /meta-hailo/recipes-app/tappas/files/debian/libgsthailotools.install: -------------------------------------------------------------------------------- 1 | usr/lib/${DEB_HOST_MULTIARCH}/gstreamer-1.0/libgsthailotools.so* 2 | usr/lib/${DEB_HOST_MULTIARCH}/libgsthailometa.so* 3 | usr/lib/${DEB_HOST_MULTIARCH}/libhailo_tracker.so* -------------------------------------------------------------------------------- /meta-hailo/recipes-app/tappas/files/debian/not-installed: -------------------------------------------------------------------------------- 1 | usr/include/gsthailometa/gst_hailo_meta.hpp 2 | usr/lib/${DEB_HOST_MULTIARCH}/pkgconfig/gsthailometa.pc 3 | -------------------------------------------------------------------------------- /meta-hailo/recipes-app/tappas/files/debian/rules: -------------------------------------------------------------------------------- 1 | #!/usr/bin/make -f 2 | 3 | export DEB_BUILD_MAINT_OPTIONS=hardening=+all 4 | 5 | %: 6 | dh $@ 7 | 8 | # Tappas currently supports gstreamer well on Hailo8 with IMX8 (ARM64) 9 | # platform. Therefore, 'imx8' is used for the initial version. 10 | override_dh_auto_configure: 11 | dh_auto_configure --buildsystem=meson --sourcedirectory=core/hailo -- \ 12 | -Dlibargs="-I/usr/include/gst-hailo/metadata,\ 13 | -I/usr/include/hailo,\ 14 | -I/usr/include/gstreamer-1.0/gst/hailo" \ 15 | -Dlibxtensor="/usr/include/xtensor" \ 16 | -Dlibcxxopts='/usr/include' \ 17 | -Dlibrapidjson='/usr/include/rapidjson' \ 18 | -Dpost_processes_install_dir='/usr/lib/hailo-post-processes' \ 19 | -Dapps_install_dir='/usr/lib/' \ 20 | -Dinclude_blas=false \ 21 | -Dcpp_std="c++17" \ 22 | -Dtarget="all" \ 23 | -Dtarget_platform="imx8" \ 24 | --buildtype="release" 25 | 26 | override_dh_auto_build: 27 | dh_auto_build --buildsystem=meson --sourcedirectory=core/hailo 28 | 29 | override_dh_auto_install: 30 | dh_auto_install --buildsystem=meson --sourcedirectory=core/hailo 31 | -------------------------------------------------------------------------------- /meta-hailo/recipes-app/tappas/files/debian/tappas-apps.install: -------------------------------------------------------------------------------- 1 | usr/lib/${DEB_HOST_MULTIARCH}/libhailo_cv_singleton.so* 2 | usr/lib/${DEB_HOST_MULTIARCH}/libhailo_gst_image.so* 3 | 4 | # detection 5 | apps/h8/gstreamer/imx8/detection/detection.sh usr/share/tappas/detection/ 6 | apps/h8/gstreamer/imx8/detection/configs/* usr/share/tappas/detection/resources/configs/ 7 | 8 | # license_plate_recognition 9 | apps/h8/gstreamer/imx8/license_plate_recognition/license_plate_recognition.sh usr/share/tappas/license_plate_recognition/ 10 | apps/h8/gstreamer/imx8/license_plate_recognition/configs/* usr/share/tappas/license_plate_recognition/resources/configs 11 | usr/lib/license_plate_recognition/resources/liblpr_ocrsink.so usr/share/tappas/license_plate_recognition/resources/ 12 | usr/lib/license_plate_recognition/resources/liblpr_overlay.so usr/share/tappas/license_plate_recognition/resources/ 13 | 14 | # multistream_detection 15 | apps/h8/gstreamer/imx8/multistream_detection/*.sh usr/share/tappas/multistream_detection/ 16 | apps/h8/gstreamer/imx8/multistream_detection/configs/* usr/share/tappas/multistream_detection/resources/configs 17 | -------------------------------------------------------------------------------- /meta-hailo/recipes-app/tappas/files/debian/tappas-tracers.install: -------------------------------------------------------------------------------- 1 | usr/lib/${DEB_HOST_MULTIARCH}/gstreamer-1.0/libgsthailotracers.so* 2 | -------------------------------------------------------------------------------- /meta-hailo/recipes-app/tappas/files/patches/0002-Do-not-install-binaries-without-clear-license-clarif.patch: -------------------------------------------------------------------------------- 1 | From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 2 | From: Li Hua Qian 3 | Date: Thu, 13 Mar 2025 16:53:56 +0800 4 | Subject: [PATCH] Do not install binaries without clear license clarification 5 | 6 | Signed-off-by: Li Hua Qian 7 | --- 8 | core/hailo/libs/postprocesses/meson.build | 2 +- 9 | 1 file changed, 1 insertion(+), 1 deletion(-) 10 | 11 | diff --git a/core/hailo/libs/postprocesses/meson.build b/core/hailo/libs/postprocesses/meson.build 12 | index dddb59e5fc4c..a77fec7951cb 100644 13 | --- a/core/hailo/libs/postprocesses/meson.build 14 | +++ b/core/hailo/libs/postprocesses/meson.build 15 | @@ -1,4 +1,4 @@ 16 | -install_subdir('post_processes_data', install_dir: post_proc_install_dir) 17 | +install_emptydir(post_proc_install_dir / 'post_processes_data') 18 | 19 | ################################################ 20 | # DETECTION SOURCES - MobilenetSSD 21 | -------------------------------------------------------------------------------- /meta-hailo/recipes-app/tappas/lpr_pipeline.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siemens/meta-iot2050/825b467d76be531d2ddb9e71455365307ce2680e/meta-hailo/recipes-app/tappas/lpr_pipeline.gif -------------------------------------------------------------------------------- /meta-hailo/recipes-app/tappas/multistream_detection.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siemens/meta-iot2050/825b467d76be531d2ddb9e71455365307ce2680e/meta-hailo/recipes-app/tappas/multistream_detection.gif -------------------------------------------------------------------------------- /meta-hailo/recipes-app/tappas/tappas_3.29.1.bb: -------------------------------------------------------------------------------- 1 | # SPDX-License-Identifier: MIT 2 | # SPDX-FileCopyrightText: Copyright (c) Siemens AG, 2025 3 | # SPDX-FileContributor: Authored by Li Hua Qian 4 | 5 | DESCRIPTION = "application examples, pipeline elements and pre-trained AI for Hailo8" 6 | LICENSE = "MIT" 7 | 8 | inherit dpkg 9 | 10 | SRC_URI = "git://git@github.com/hailo-ai/tappas.git;protocol=https;name=tappas;branch=master;destsuffix=${P}" 11 | # Tappas v3.29.1-vpu-v1.4.1 12 | SRCREV_tappas = "4327923422ababaf3a9395f86bf39f5b34dcfd83" 13 | 14 | SRC_URI += " \ 15 | file://debian/control \ 16 | file://debian/rules \ 17 | file://debian/libgsthailotools.install \ 18 | file://debian/tappas-apps.install \ 19 | file://debian/hailo-post-processes.install \ 20 | file://debian/tappas-tracers.install \ 21 | file://debian/not-installed \ 22 | file://files/patches/0001-tappas-Adapt-tappas-apps-for-compatibility-with-meta.patch \ 23 | file://files/patches/0002-Do-not-install-binaries-without-clear-license-clarif.patch \ 24 | " 25 | 26 | DEPENDS += " hailort " 27 | PROVIDES += " libgsthailotools tappas-apps hailo-post-processes tappas-tracers" 28 | 29 | S = "${WORKDIR}/${P}" 30 | 31 | do_prepare_build[cleandirs] += "${S}/debian" 32 | do_prepare_build() { 33 | deb_add_changelog 34 | cp -r ${WORKDIR}/debian/* ${S}/debian/ 35 | } 36 | -------------------------------------------------------------------------------- /meta-hailo/recipes-bsp/hailo-firmware/hailo-firmware_4.18.0.bb: -------------------------------------------------------------------------------- 1 | # SPDX-FileCopyrightText: Copyright 2023-2024 Siemens AG 2 | # SPDX-License-Identifier: MIT 3 | DESCRIPTION = "hailo firmware - hailo8 chip firmware (hailo_fw.bin)" 4 | 5 | BASE_URI = "https://hailo-hailort.s3.eu-west-2.amazonaws.com" 6 | FW_AWS_DIR = "Hailo8/${PV}/FW" 7 | FW = "hailo8_fw.${PV}.bin" 8 | LICENSE_FILE = "LICENSE" 9 | 10 | SRC_URI = "${BASE_URI}/${FW_AWS_DIR}/${FW};name=firmware \ 11 | ${BASE_URI}/${FW_AWS_DIR}/${LICENSE_FILE};name=license" 12 | SRC_URI[firmware.sha256sum] = "bfa576dd782359d74cabcb19e87c3a934dce03dea0785e41f86fecc9a687a92b" 13 | SRC_URI[license.md5sum] = "263ee034adc02556d59ab1ebdaea2cda" 14 | 15 | LICENSE = "LICENSE" 16 | LIC_FILES_CHKSUM = "file://${WORKDIR}/${LICENSE_FILE};md5=263ee034adc02556d59ab1ebdaea2cda" 17 | 18 | FW_PATH = "${WORKDIR}/${FW}" 19 | 20 | DPKG_ARCH = "all" 21 | 22 | inherit dpkg-raw 23 | 24 | do_install() { 25 | # Stores hailo8_fw.bin in the rootfs under /lib/firmware/hailo/ 26 | install -d ${D}/lib/firmware/hailo 27 | install -m 0644 ${FW_PATH} ${D}/lib/firmware/hailo/hailo8_fw.bin 28 | } 29 | -------------------------------------------------------------------------------- /meta-hailo/recipes-kernel/hailo-pci/hailo-pci_4.18.0.bb: -------------------------------------------------------------------------------- 1 | # SPDX-FileCopyrightText: Copyright 2023-2024 Siemens AG 2 | # SPDX-License-Identifier: MIT 3 | DESCRIPTION = "hailo pcie driver - the kernel driver for pci communication with hailo8" 4 | 5 | LICENSE = "gpl-2.0" 6 | LIC_FILES_CHKSUM = "file://${LAYERDIR_core}/licenses/COPYING.GPLv2;md5=751419260aa954499f7abaabaa882bbe" 7 | 8 | SRC_URI = "git://git@github.com/hailo-ai/hailort-drivers.git;protocol=https;branch=master" 9 | SRCREV = "7161f9ee5918029bd4497f590003c2f87ec32507" 10 | 11 | require recipes-kernel/linux-module/module.inc 12 | 13 | S = "${WORKDIR}/git" 14 | MODULE_DIR = "$(PWD)/linux/pcie" 15 | 16 | do_prepare_build:append() { 17 | cp ${S}/linux/pcie/51-hailo-udev.rules ${S}/debian/${BPN}.udev 18 | } 19 | -------------------------------------------------------------------------------- /meta-hailo/recipes-python/python-numpy/files/debian/control: -------------------------------------------------------------------------------- 1 | Source: python-numpy 2 | Section: python 3 | Priority: optional 4 | Maintainer: Li Hua Qian 5 | Build-Depends: debhelper-compat (= 13), 6 | dh-python, 7 | python3-setuptools (>= 42), 8 | libpython3-all-dev (>= 3.2), 9 | python3-all-dev:any (>= 3.2), 10 | python3-wheel:native, 11 | cython3 12 | Standards-Version: 4.6.1 13 | Homepage: https://numpy.org/ 14 | Vcs-Browser: https://github.com/numpy/numpy 15 | Vcs-Git: https://github.com/numpy/numpy.git 16 | Rules-Requires-Root: no 17 | 18 | Package: python3-numpy 19 | Architecture: all 20 | Multi-Arch: foreign 21 | Depends: 22 | ${python3:Depends}, 23 | ${misc:Depends} 24 | Description: NumPy is the fundamental package for array computing with Python. 25 | NumPy is the fundamental package needed for scientific computing with Python. 26 | This package contains the Python 3 version of NumPy. 27 | -------------------------------------------------------------------------------- /meta-hailo/recipes-python/python-numpy/files/debian/rules: -------------------------------------------------------------------------------- 1 | #!/usr/bin/make -f 2 | 3 | export PYBUILD_NAME=numpy 4 | 5 | %: 6 | set -x 7 | dh $@ --with python3 --buildsystem=pybuild 8 | 9 | override_dh_auto_configure: 10 | python3 setup.py build 11 | 12 | override_dh_auto_clean: 13 | echo "setup.py clean is not supported" -------------------------------------------------------------------------------- /meta-hailo/recipes-python/python-numpy/python-numpy_1.23.3.bb: -------------------------------------------------------------------------------- 1 | # SPDX-FileCopyrightText: Copyright 2024 Siemens AG 2 | # SPDX-License-Identifier: MIT 3 | 4 | inherit dpkg 5 | 6 | SRC_URI = "https://github.com/numpy/numpy/archive/refs/tags/v1.23.3.tar.gz" 7 | SRC_URI[sha256sum] = "d55da69341fd6e617ada55feec6798730457f26f08300956625c086499aced7e" 8 | 9 | SRC_URI += " \ 10 | file://debian/control \ 11 | file://debian/rules \ 12 | " 13 | 14 | S = "${WORKDIR}/numpy-1.23.3" 15 | 16 | PROVIDES += "python3-numpy" 17 | 18 | DEB_BUILD_PROFILES = "nocheck" 19 | DEB_BUILD_OPTIONS = "nocheck" 20 | 21 | do_prepare_build[cleandirs] += "${S}/debian" 22 | do_prepare_build() { 23 | deb_debianize 24 | rm -f ${S}/debian/compat 25 | cp ${WORKDIR}/debian/control \ 26 | ${WORKDIR}/debian/rules \ 27 | ${S}/debian/ 28 | } -------------------------------------------------------------------------------- /meta-hailo/recipes-python/python-verboselogs/files/debian/control: -------------------------------------------------------------------------------- 1 | Source: python-verboselogs 2 | Section: python 3 | Priority: optional 4 | Maintainer: Li Hua Qian 5 | Build-Depends: debhelper-compat (= 13), 6 | dh-python, 7 | python3-setuptools (>=42), 8 | libpython3-all-dev (>=3.2), 9 | python3-all-dev:any (>=3.2), 10 | python3-wheel:native, 11 | Standards-Version: 4.6.1 12 | Homepage: https://verboselogs.readthedocs.io/ 13 | Vcs-Browser: https://github.com/xolox/python-verboselogs 14 | Vcs-Git: https://github.com/xolox/python-verboselogs.git 15 | Rules-Requires-Root: no 16 | 17 | Package: python3-verboselogs 18 | Architecture: all 19 | Multi-Arch: foreign 20 | Depends: ${python3:Depends}, ${misc:Depends} 21 | Description: extends Pythons logging module to add the log levels 22 | The levels NOTICE, SPAM, SUCCESS and VERBOSE are added 23 | -------------------------------------------------------------------------------- /meta-hailo/recipes-python/python-verboselogs/files/debian/rules: -------------------------------------------------------------------------------- 1 | #!/usr/bin/make -f 2 | 3 | export PYBUILD_NAME=verboselogs 4 | 5 | %: 6 | dh $@ --with python3 --buildsystem=pybuild 7 | -------------------------------------------------------------------------------- /meta-hailo/recipes-python/python-verboselogs/python-verboselogs_1.7.bb: -------------------------------------------------------------------------------- 1 | # SPDX-FileCopyrightText: Copyright 2024 Siemens AG 2 | # SPDX-License-Identifier: MIT 3 | 4 | # Warning: This package seems abandoned. Latest commit is from 7 years ago 5 | 6 | inherit dpkg 7 | 8 | SRC_URI = "git://github.com/xolox/python-verboselogs.git;protocol=https;branch=master" 9 | SRCREV ="3cebc69e03588bb6c3726c38c324b12732989292" 10 | 11 | SRC_URI += " \ 12 | file://debian/control \ 13 | file://debian/rules \ 14 | " 15 | 16 | S = "${WORKDIR}/git" 17 | 18 | PROVIDES += "python3-verboselogs" 19 | 20 | DEB_BUILD_PROFILES = "nocheck" 21 | DEB_BUILD_OPTIONS = "nocheck" 22 | 23 | do_prepare_build[cleandirs] += "${S}/debian" 24 | do_prepare_build() { 25 | deb_debianize 26 | rm -f ${S}/debian/compat 27 | cp ${WORKDIR}/debian/control \ 28 | ${WORKDIR}/debian/rules \ 29 | ${S}/debian/ 30 | } 31 | -------------------------------------------------------------------------------- /recipes-app/board-conf-tools/board-conf-tools_0.1.bb: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) Siemens AG, 2023 3 | # 4 | # Authors: 5 | # Chao Zeng 6 | # 7 | # This file is subject to the terms and conditions of the MIT License. See 8 | # COPYING.MIT file in the top-level directory. 9 | # 10 | 11 | inherit dpkg-raw 12 | 13 | DESCRIPTION = "Board configuration tools" 14 | MAINTAINER = "chao.zeng@siemens.com" 15 | 16 | SRC_URI = "file://board-conf-tools \ 17 | file://board-bootup-configuration.service \ 18 | file://postinst \ 19 | " 20 | 21 | RDEPENDS = "mraa" 22 | DEBIAN_DEPENDS = "python3-newt, mraa" 23 | 24 | S = "${WORKDIR}/board-conf-tools" 25 | 26 | do_install() { 27 | install -v -d ${D}/usr/bin/ 28 | install -v -d ${D}/etc 29 | install -v -d ${D}/lib/systemd/system/ 30 | # add board bootup configuration service 31 | install -v -m 644 ${WORKDIR}/board-bootup-configuration.service ${D}/lib/systemd/system/ 32 | 33 | cp -rf ${WORKDIR}/board-conf-tools ${D}/etc 34 | ln -sf /etc/board-conf-tools/iot2050setup.py ${D}/usr/bin/iot2050setup 35 | ln -sf /etc/board-conf-tools/board-bootup-conf.py ${D}/usr/bin/board-bootup-configuration 36 | } 37 | -------------------------------------------------------------------------------- /recipes-app/board-conf-tools/files/board-bootup-configuration.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=IOT2050 Board Bootup Configuration 3 | 4 | [Service] 5 | Type=idle 6 | ExecStart=/usr/bin/board-bootup-configuration 7 | StandardOutput=tty 8 | 9 | [Install] 10 | WantedBy=multi-user.target 11 | -------------------------------------------------------------------------------- /recipes-app/board-conf-tools/files/board-conf-tools/json_ops/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siemens/meta-iot2050/825b467d76be531d2ddb9e71455365307ce2680e/recipes-app/board-conf-tools/files/board-conf-tools/json_ops/__init__.py -------------------------------------------------------------------------------- /recipes-app/board-conf-tools/files/postinst: -------------------------------------------------------------------------------- 1 | # 2 | # Authors: 3 | # Chao Zeng 4 | # 5 | # This file is subject to the terms and conditions of the MIT License. See 6 | # COPYING.MIT file in the top-level directory. 7 | # 8 | 9 | # Board bootup configuration service 10 | systemctl enable board-bootup-configuration.service 11 | -------------------------------------------------------------------------------- /recipes-app/iot2050-conf-webui/README.md: -------------------------------------------------------------------------------- 1 | # IOT2050 Conf WEBUI 2 | 3 | This is the IOT2050 configuration webUI, it is used to setup the device and it's 4 | extension modules. 5 | 6 | Currently it only supports IOT2050 SM variant. 7 | 8 | This exposes a http service on the 2050 port from the IOT2050 device, please use 9 | `http://:2050` to access it. 10 | 11 | The web server is managed by the `iot2050-conf-webui.service` systemd service, 12 | thus the `systemctl` command could be used to start/stop or enable/disable this 13 | web server. 14 | 15 | Supported browser: Firefox, Chrome, Edge, etc. IE is not supported. 16 | 17 | ## Development 18 | 19 | This application is using Next.JS + Material UI. 20 | 21 | There are two `npm-shrinkwrap.json` files: 22 | 23 | - `npm-shrinkwrap.json` 24 | - `npm-shrinkwrap.json.nodev` 25 | 26 | The later one removes all the `devDependencies`, it is only for packaging 27 | purpose, due to some npm packaging issue, the `devDependencies` must be removed 28 | from the package.json. 29 | 30 | If any new dependency package is added, make sure to generate both these files. 31 | 32 | Install dependencies and run via `npm`: 33 | 34 | ```shell 35 | # install dependencies 36 | npm install 37 | 38 | # run for development 39 | npm run dev -- -p 2050 40 | 41 | # run for production 42 | npm run build 43 | npm run start -- -p 2050 44 | ``` 45 | 46 | Open [http://localhost:2050](http://localhost:2050) with your browser to see the 47 | result. 48 | -------------------------------------------------------------------------------- /recipes-app/iot2050-conf-webui/files/.eslintrc.yml: -------------------------------------------------------------------------------- 1 | env: 2 | browser: true 3 | es2021: true 4 | node: true 5 | extends: 6 | - standard 7 | - plugin:react/recommended 8 | parserOptions: 9 | ecmaVersion: latest 10 | sourceType: module 11 | plugins: 12 | - react 13 | rules: { 14 | semi: [2, "always"] 15 | } 16 | -------------------------------------------------------------------------------- /recipes-app/iot2050-conf-webui/files/iot2050-conf-webui.service: -------------------------------------------------------------------------------- 1 | [Unit] 2 | Description=IOT2050 Configuration Web UI 3 | After=syslog.target network.target 4 | 5 | [Service] 6 | Type=idle 7 | User=root 8 | WorkingDirectory=/srv/iot2050-conf-webui 9 | ExecStart=/usr/bin/npm run start --prefix=/srv/iot2050-conf-webui -- -p 2050 10 | 11 | [Install] 12 | WantedBy=multi-user.target 13 | -------------------------------------------------------------------------------- /recipes-app/iot2050-conf-webui/files/jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "paths": { 4 | "@/*": ["./src/*"] 5 | } 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /recipes-app/iot2050-conf-webui/files/next.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | 3 | const CopyPlugin = require('copy-webpack-plugin'); 4 | 5 | const nextConfig = { 6 | reactStrictMode: true, 7 | swcMinify: true, 8 | modularizeImports: { 9 | '@mui/icons-material': { 10 | transform: '@mui/icons-material/{{member}}', 11 | }, 12 | }, 13 | webpack: (config, { isServer }) => { 14 | // Only run in server mode 15 | if (isServer) { 16 | config.plugins.push( 17 | new CopyPlugin({ 18 | patterns: [ 19 | { 20 | from: 'src/lib/gRPC', 21 | to: 'gRPC' 22 | }, 23 | { 24 | from: 'src/lib/gRPC', 25 | to: 'app/gRPC' 26 | } 27 | ], 28 | }) 29 | ); 30 | } 31 | return config; 32 | }, 33 | }; 34 | 35 | module.exports = nextConfig; 36 | -------------------------------------------------------------------------------- /recipes-app/iot2050-conf-webui/files/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "iot2050-conf-webui", 3 | "version": "1.0.0", 4 | "private": true, 5 | "scripts": { 6 | "dev": "next dev", 7 | "build": "next build", 8 | "start": "next start", 9 | "lint": "next lint" 10 | }, 11 | "dependencies": { 12 | "@emotion/cache": "~11.11.0", 13 | "@emotion/react": "~11.11.1", 14 | "@emotion/styled": "~11.11.0", 15 | "@grpc/grpc-js": "~1.9.5", 16 | "@grpc/proto-loader": "~0.7.10", 17 | "@mui/icons-material": "~5.14.12", 18 | "@mui/material": "~5.14.12", 19 | "copy-webpack-plugin": "~11.0.0", 20 | "lodash": "~4.17.21", 21 | "next": "~13.5.4", 22 | "prop-types": "^15.8.1", 23 | "react": "~18.2.0", 24 | "react-dom": "~18.2.0", 25 | "yaml": "~2.3.3" 26 | }, 27 | "devDependencies": { 28 | "eslint": "^8.51.0", 29 | "eslint-config-next": "~13.5.4", 30 | "eslint-config-standard": "^17.1.0", 31 | "eslint-plugin-import": "^2.28.1", 32 | "eslint-plugin-n": "^16.2.0", 33 | "eslint-plugin-promise": "^6.1.1", 34 | "eslint-plugin-react": "^7.33.2" 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /recipes-app/iot2050-conf-webui/files/src/app/deploy/route.js: -------------------------------------------------------------------------------- 1 | import { deployService } from '@/lib/eioService/eioService.js'; 2 | 3 | export const dynamic = 'force-dynamic'; 4 | 5 | export async function POST (request) { 6 | const config = await request.json(); 7 | const res = await deployService(JSON.stringify(config)); 8 | 9 | const msg = { 10 | status: 0, 11 | message: '' 12 | }; 13 | if ('code' in res) { 14 | msg.status = res.code; 15 | msg.message = res.details; 16 | } else { 17 | msg.status = res.status; 18 | msg.message = res.message; 19 | } 20 | 21 | return new Response(JSON.stringify({ 22 | message: msg 23 | }), { 24 | headers: { 'Content-Type': 'application/json' } 25 | }); 26 | } 27 | -------------------------------------------------------------------------------- /recipes-app/iot2050-conf-webui/files/src/app/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siemens/meta-iot2050/825b467d76be531d2ddb9e71455365307ce2680e/recipes-app/iot2050-conf-webui/files/src/app/favicon.ico -------------------------------------------------------------------------------- /recipes-app/iot2050-conf-webui/files/src/app/page.js: -------------------------------------------------------------------------------- 1 | import * as React from 'react'; 2 | import Box from '@mui/material/Box'; 3 | import Alert from '@mui/material/Alert'; 4 | import AlertTitle from '@mui/material/AlertTitle'; 5 | 6 | export default function HomePage () { 7 | return ( 8 | 13 | 14 | 15 | IOT2050 SETUP 👋 16 | https://github.com/siemens/meta-iot2050 17 | 18 | 19 | 20 | ); 21 | } 22 | -------------------------------------------------------------------------------- /recipes-app/iot2050-conf-webui/files/src/app/retrieve/route.js: -------------------------------------------------------------------------------- 1 | import { retrieveService } from '@/lib/eioService/eioService.js'; 2 | 3 | export const dynamic = 'force-dynamic'; 4 | 5 | export async function GET (request) { 6 | const res = await retrieveService(); 7 | 8 | const msg = { 9 | status: 0, 10 | message: '' 11 | }; 12 | if ('code' in res) { 13 | msg.status = res.code; 14 | msg.message = res.details; 15 | } else { 16 | msg.status = res.status; 17 | msg.message = res.message; 18 | msg.yaml_data = res.yaml_data; 19 | } 20 | 21 | return new Response(JSON.stringify({ 22 | message: msg 23 | }), { 24 | headers: { 'Content-Type': 'application/json' } 25 | }); 26 | } 27 | -------------------------------------------------------------------------------- /recipes-app/iot2050-conf-webui/files/src/components/ConfigEntry/CheckConfig.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable react/prop-types */ 2 | import * as React from 'react'; 3 | import Checkbox from '@mui/material/Checkbox'; 4 | import FormControlLabel from '@mui/material/FormControlLabel'; 5 | 6 | const doNothing = (id) => {}; 7 | 8 | export default function CheckConfig ({ id, data, updateConfig, disabled = false, postChange = doNothing }) { 9 | const setNewValue = (newValue) => { 10 | data.value = newValue; 11 | postChange(id); 12 | updateConfig(); 13 | }; 14 | 15 | const onChange = (event) => { 16 | setNewValue(event.target.checked); 17 | }; 18 | 19 | /* When disabled, the value should be setting to false */ 20 | React.useEffect(() => { 21 | if (disabled) { 22 | setNewValue(false); 23 | } 24 | }, [disabled]); 25 | 26 | return ( 27 | } 36 | /> 37 | ); 38 | } 39 | -------------------------------------------------------------------------------- /recipes-app/iot2050-conf-webui/files/src/components/ConfigEntry/ConfigGroupLabel.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable react/prop-types */ 2 | import * as React from 'react'; 3 | import FormLabel from '@mui/material/FormLabel'; 4 | import Typography from '@mui/material/Typography'; 5 | 6 | export default function ConfigGroupLabel ({ label }) { 7 | return ( 8 | 9 | 13 | {label} 14 | 15 | 16 | ); 17 | } 18 | -------------------------------------------------------------------------------- /recipes-app/iot2050-conf-webui/files/src/components/ConfigEntry/SelectionConfig.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable react/prop-types */ 2 | import * as React from 'react'; 3 | import MenuItem from '@mui/material/MenuItem'; 4 | import TextField from '@mui/material/TextField'; 5 | 6 | const doNothing = (event) => {}; 7 | 8 | export default function SelectionConfig ({ id, data, updateConfig, disabled = false, postChange = doNothing }) { 9 | const onChange = (event) => { 10 | data.value = event.target.value; 11 | postChange(event); 12 | updateConfig(); 13 | }; 14 | 15 | return ( 16 | 26 | {data.selection.map((option) => ( 27 | 28 | {option} 29 | 30 | ))} 31 | 32 | ); 33 | } 34 | -------------------------------------------------------------------------------- /recipes-app/iot2050-conf-webui/files/src/components/ExtendedModules/SM1223/SM1223_AC_DI8_DQ8RLY_Conf.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable camelcase */ 2 | /* eslint-disable react/prop-types */ 3 | import * as React from 'react'; 4 | import SM1223Conf from './SM1223Conf'; 5 | 6 | export default function SM1223_AC_DI8_DQ8RLY_Conf ({ slotNum, configData, updateConfig }) { 7 | return ( 8 | 14 | ); 15 | } 16 | -------------------------------------------------------------------------------- /recipes-app/iot2050-conf-webui/files/src/components/ExtendedModules/SM1223/SM1223_DC_DI16_DQ16RLY_Conf.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable camelcase */ 2 | /* eslint-disable react/prop-types */ 3 | import * as React from 'react'; 4 | import SM1223Conf from './SM1223Conf'; 5 | 6 | export default function SM1223_DC_DI16_DQ16RLY_Conf ({ slotNum, configData, updateConfig }) { 7 | return ( 8 | 14 | ); 15 | } 16 | -------------------------------------------------------------------------------- /recipes-app/iot2050-conf-webui/files/src/components/ExtendedModules/SM1231_AI/SM1231with4AIConf.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable camelcase */ 2 | /* eslint-disable react/prop-types */ 3 | import * as React from 'react'; 4 | import SM1231AIConf, { channelConfigDefault } from './SM1231AIConf'; 5 | import uiString from '@/lib/uiString/SM1231_AI.json'; 6 | 7 | export const SM1231with4AIConfDefault = { 8 | mlfb: '6ES7231-4HD32-0XB0', 9 | power_alarm: { 10 | label: uiString.LABEL_POWER_ALARM, 11 | value: true 12 | }, 13 | integ_time: { 14 | label: uiString.LABEL_INT_TIME, 15 | selection: [ 16 | uiString.INT_TIME_0, 17 | uiString.INT_TIME_1, 18 | uiString.INT_TIME_2, 19 | uiString.INT_TIME_3 20 | ], 21 | value: uiString.INT_TIME_2 22 | }, 23 | channels: [ 24 | JSON.parse(JSON.stringify(channelConfigDefault)), 25 | JSON.parse(JSON.stringify(channelConfigDefault)), 26 | JSON.parse(JSON.stringify(channelConfigDefault)), 27 | JSON.parse(JSON.stringify(channelConfigDefault)) 28 | ] 29 | }; 30 | 31 | export default function SM1231with4AIConf ({ slotNum, configData, updateConfig }) { 32 | return ( 33 | 39 | ); 40 | } 41 | -------------------------------------------------------------------------------- /recipes-app/iot2050-conf-webui/files/src/components/ExtendedModules/SM1231_AI/SM1231with8AIConf.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable camelcase */ 2 | /* eslint-disable react/prop-types */ 3 | import * as React from 'react'; 4 | import SM1231AIConf, { channelConfigDefault } from './SM1231AIConf'; 5 | import uiString from '@/lib/uiString/SM1231_AI.json'; 6 | 7 | export const SM1231with8AIConfDefault = { 8 | mlfb: '6ES7231-4HF32-0XB0', 9 | power_alarm: { 10 | label: uiString.LABEL_POWER_ALARM, 11 | value: true 12 | }, 13 | integ_time: { 14 | label: uiString.LABEL_INT_TIME, 15 | selection: [ 16 | uiString.INT_TIME_0, 17 | uiString.INT_TIME_1, 18 | uiString.INT_TIME_2, 19 | uiString.INT_TIME_3 20 | ], 21 | value: uiString.INT_TIME_2 22 | }, 23 | channels: [ 24 | JSON.parse(JSON.stringify(channelConfigDefault)), 25 | JSON.parse(JSON.stringify(channelConfigDefault)), 26 | JSON.parse(JSON.stringify(channelConfigDefault)), 27 | JSON.parse(JSON.stringify(channelConfigDefault)), 28 | JSON.parse(JSON.stringify(channelConfigDefault)), 29 | JSON.parse(JSON.stringify(channelConfigDefault)), 30 | JSON.parse(JSON.stringify(channelConfigDefault)), 31 | JSON.parse(JSON.stringify(channelConfigDefault)) 32 | ] 33 | }; 34 | 35 | export default function SM1231with8AIConf ({ slotNum, configData, updateConfig }) { 36 | return ( 37 | 43 | ); 44 | } 45 | -------------------------------------------------------------------------------- /recipes-app/iot2050-conf-webui/files/src/components/ExtendedModules/SM1231_RTD/SM1231_4RTDConf.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable camelcase */ 2 | /* eslint-disable react/prop-types */ 3 | import * as React from 'react'; 4 | import SM1231_RTDConf, { channelConfigDefault } from './SM1231_RTDConf'; 5 | import uiString from '@/lib/uiString/SM1231_RTD.json'; 6 | 7 | export const SM1231_4RTDConfDefault = { 8 | mlfb: '6ES7231-5PD32-0XB0', 9 | power_alarm: { 10 | label: uiString.LABEL_POWER_ALARM, 11 | value: true, 12 | disabled: false 13 | }, 14 | integ_time: { 15 | label: uiString.LABEL_INT_TIME, 16 | selection: [ 17 | uiString.INT_TIME_0, 18 | uiString.INT_TIME_1, 19 | uiString.INT_TIME_2, 20 | uiString.INT_TIME_3 21 | ], 22 | value: uiString.INT_TIME_2 23 | }, 24 | channels: [ 25 | JSON.parse(JSON.stringify(channelConfigDefault)), 26 | JSON.parse(JSON.stringify(channelConfigDefault)), 27 | JSON.parse(JSON.stringify(channelConfigDefault)), 28 | JSON.parse(JSON.stringify(channelConfigDefault)) 29 | ] 30 | }; 31 | 32 | export default function SM1231_4RTDConf ({ slotNum, configData, updateConfig }) { 33 | return ( 34 | 40 | ); 41 | } 42 | -------------------------------------------------------------------------------- /recipes-app/iot2050-conf-webui/files/src/components/ExtendedModules/SM1231_RTD/SM1231_8RTDConf.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable camelcase */ 2 | /* eslint-disable react/prop-types */ 3 | import * as React from 'react'; 4 | import SM1231_RTDConf, { channelConfigDefault } from './SM1231_RTDConf'; 5 | import uiString from '@/lib/uiString/SM1231_RTD.json'; 6 | 7 | export const SM1231_8RTDConfDefault = { 8 | mlfb: '6ES7231-5PF32-0XB0', 9 | power_alarm: { 10 | label: uiString.LABEL_POWER_ALARM, 11 | value: true, 12 | disabled: false 13 | }, 14 | integ_time: { 15 | label: uiString.LABEL_INT_TIME, 16 | selection: [ 17 | uiString.INT_TIME_0, 18 | uiString.INT_TIME_1, 19 | uiString.INT_TIME_2, 20 | uiString.INT_TIME_3 21 | ], 22 | value: uiString.INT_TIME_2 23 | }, 24 | channels: [ 25 | JSON.parse(JSON.stringify(channelConfigDefault)), 26 | JSON.parse(JSON.stringify(channelConfigDefault)), 27 | JSON.parse(JSON.stringify(channelConfigDefault)), 28 | JSON.parse(JSON.stringify(channelConfigDefault)), 29 | JSON.parse(JSON.stringify(channelConfigDefault)), 30 | JSON.parse(JSON.stringify(channelConfigDefault)), 31 | JSON.parse(JSON.stringify(channelConfigDefault)), 32 | JSON.parse(JSON.stringify(channelConfigDefault)) 33 | ] 34 | }; 35 | 36 | export default function SM1231_8RTDConf ({ slotNum, configData, updateConfig }) { 37 | return ( 38 | 44 | ); 45 | } 46 | -------------------------------------------------------------------------------- /recipes-app/iot2050-conf-webui/files/src/components/ExtendedModules/SMSensDI/SMSensDIConf.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable react/prop-types */ 2 | import * as React from 'react'; 3 | import Stack from '@mui/material/Stack'; 4 | import ModuleInfo from '@/components/ModuleInfo'; 5 | 6 | const desc = 'SM SENS DI'; 7 | 8 | export function convertToUIFormat (config) { 9 | const ret = { 10 | mlfb: config.mlfb 11 | }; 12 | return ret; 13 | }; 14 | 15 | export function convertToDeviceFormat (config) { 16 | const ret = { 17 | description: desc, 18 | mlfb: config.mlfb 19 | }; 20 | return ret; 21 | }; 22 | 23 | export const SMSensDIConfDefault = { 24 | mlfb: '6ES7647-0CM00-1AA2' 25 | }; 26 | 27 | export default function SMSensDIConf ({ slotNum, configData, updateConfig }) { 28 | return ( 29 | 35 | 40 | 41 | ); 42 | } 43 | -------------------------------------------------------------------------------- /recipes-app/iot2050-conf-webui/files/src/components/ModuleInfo.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable react/prop-types */ 2 | import * as React from 'react'; 3 | import Stack from '@mui/material/Stack'; 4 | import TextField from '@mui/material/TextField'; 5 | 6 | export default function ModuleInfo ({ description, artNumber, fwVersion }) { 7 | return ( 8 | 14 | 23 | 32 | 42 | 43 | ); 44 | } 45 | -------------------------------------------------------------------------------- /recipes-app/iot2050-conf-webui/files/src/components/ThemeRegistry/ThemeRegistry.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable react/prop-types */ 2 | 'use client'; 3 | 4 | import * as React from 'react'; 5 | import { ThemeProvider } from '@mui/material/styles'; 6 | import CssBaseline from '@mui/material/CssBaseline'; 7 | import NextAppDirEmotionCacheProvider from './EmotionCache'; 8 | import theme from './theme'; 9 | 10 | export default function ThemeRegistry ({ children }) { 11 | return ( 12 | 13 | 14 | {/* CssBaseline kickstart an elegant, consistent, and simple baseline to build upon. */} 15 | 16 | {children} 17 | 18 | 19 | ); 20 | } 21 | -------------------------------------------------------------------------------- /recipes-app/iot2050-conf-webui/files/src/components/ThemeRegistry/fonts/SiemensSans_Prof_Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siemens/meta-iot2050/825b467d76be531d2ddb9e71455365307ce2680e/recipes-app/iot2050-conf-webui/files/src/components/ThemeRegistry/fonts/SiemensSans_Prof_Bold.woff2 -------------------------------------------------------------------------------- /recipes-app/iot2050-conf-webui/files/src/components/ThemeRegistry/fonts/SiemensSans_Prof_BoldItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siemens/meta-iot2050/825b467d76be531d2ddb9e71455365307ce2680e/recipes-app/iot2050-conf-webui/files/src/components/ThemeRegistry/fonts/SiemensSans_Prof_BoldItalic.woff2 -------------------------------------------------------------------------------- /recipes-app/iot2050-conf-webui/files/src/components/ThemeRegistry/fonts/SiemensSans_Prof_Italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siemens/meta-iot2050/825b467d76be531d2ddb9e71455365307ce2680e/recipes-app/iot2050-conf-webui/files/src/components/ThemeRegistry/fonts/SiemensSans_Prof_Italic.woff2 -------------------------------------------------------------------------------- /recipes-app/iot2050-conf-webui/files/src/components/ThemeRegistry/fonts/SiemensSans_Prof_Roman.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/siemens/meta-iot2050/825b467d76be531d2ddb9e71455365307ce2680e/recipes-app/iot2050-conf-webui/files/src/components/ThemeRegistry/fonts/SiemensSans_Prof_Roman.woff2 -------------------------------------------------------------------------------- /recipes-app/iot2050-conf-webui/files/src/components/ThemeRegistry/theme.js: -------------------------------------------------------------------------------- 1 | import localFont from 'next/font/local'; 2 | import { createTheme } from '@mui/material/styles'; 3 | 4 | const siemensSans = localFont({ 5 | src: [ 6 | { 7 | path: './fonts/SiemensSans_Prof_Roman.woff2', 8 | weight: '400', 9 | style: 'normal' 10 | }, 11 | { 12 | path: './fonts/SiemensSans_Prof_Italic.woff2', 13 | weight: '400', 14 | style: 'italic' 15 | }, 16 | { 17 | path: './fonts/SiemensSans_Prof_Bold.woff2', 18 | weight: '700', 19 | style: 'normal' 20 | }, 21 | { 22 | path: './fonts/SiemensSans_Prof_BoldItalic.woff2', 23 | weight: '700', 24 | style: 'italic' 25 | } 26 | ] 27 | }); 28 | 29 | const theme = createTheme({ 30 | palette: { 31 | mode: 'light', 32 | primary: { 33 | light: '#d8ffef', 34 | main: '#007993', 35 | dark: '#0cc', 36 | contrastText: '#fff' 37 | }, 38 | secondary: { 39 | light: '#ff7961', 40 | main: '#fff', 41 | dark: '#000028', 42 | contrastText: '#000' 43 | } 44 | }, 45 | typography: { 46 | fontFamily: siemensSans.style.fontFamily 47 | }, 48 | components: { 49 | MuiAlert: { 50 | styleOverrides: { 51 | root: ({ ownerState }) => ({ 52 | ...(ownerState.severity === 'info' && { 53 | backgroundColor: '#00ffb9' 54 | }) 55 | }) 56 | } 57 | } 58 | } 59 | }); 60 | 61 | export default theme; 62 | -------------------------------------------------------------------------------- /recipes-app/iot2050-conf-webui/files/src/lib/gRPC/iot2050-eio.proto: -------------------------------------------------------------------------------- 1 | ../../../../../iot2050-eio-manager/files/gRPC/EIOManager/iot2050-eio.proto -------------------------------------------------------------------------------- /recipes-app/iot2050-conf-webui/files/src/lib/smConfig/ConfTextConverter.js: -------------------------------------------------------------------------------- 1 | export default class ConfTextConverter { 2 | constructor (table) { 3 | this.table = table; 4 | } 5 | 6 | uiToYaml (key, text, scenario = 'all') { 7 | for (const item of this.table) { 8 | for (const keyRe of item.keys) { 9 | if (!keyRe.test(key)) { continue; }; 10 | for (const rule of item.rules) { 11 | if (rule.scenario === scenario) { 12 | for (const m of rule.mapping) { 13 | if (text === m.ui) { 14 | return m.yaml; 15 | } 16 | } 17 | } 18 | } 19 | } 20 | } 21 | 22 | return 'ERROR!'; 23 | } 24 | 25 | yamlToUi (key, text, scenario = 'all') { 26 | for (const item of this.table) { 27 | for (const keyRe of item.keys) { 28 | if (!keyRe.test(key)) { continue; }; 29 | for (const rule of item.rules) { 30 | if (rule.scenario === scenario) { 31 | for (const m of rule.mapping) { 32 | if (text === m.yaml) { 33 | return m.ui; 34 | } 35 | } 36 | } 37 | } 38 | } 39 | } 40 | 41 | return 'ERROR!'; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /recipes-app/iot2050-conf-webui/files/src/lib/uiString/SM1221_8DI.json: -------------------------------------------------------------------------------- 1 | { 2 | "DESC_MOD": "SM 1221 DI8 x 24VDC", 3 | "LABEL_DI_INPUT_FILTER_TIME": "Digital inputs filter time configuration", 4 | "LABEL_DI_INPUT_FILTER_TIME_CH0_3": "Channel 0~3 (ms):", 5 | "LABEL_DI_INPUT_FILTER_TIME_CH4_7": "Channel 4~7 (ms):", 6 | "TIME_2": "0.2", 7 | "TIME_3": "0.4", 8 | "TIME_4": "0.8", 9 | "TIME_5": "1.6", 10 | "TIME_6": "3.2", 11 | "TIME_7": "6.4", 12 | "TIME_9": "12.8" 13 | } 14 | -------------------------------------------------------------------------------- /recipes-app/iot2050-conf-webui/files/src/lib/uiString/SM1223.json: -------------------------------------------------------------------------------- 1 | { 2 | "DESC_MOD_AC_DI8_DQ8RLY": "SM 1223 DI8 x 120VAC / DQ8 x relay", 3 | "DESC_MOD_DC_DI16_DQ16RLY": "SM 1223 DI16 x 24VAC / DQ16 x relay", 4 | "LABEL_DI_INPUT_FILTER_TIME": "Digital inputs filter time configuration", 5 | "LABEL_DI_INPUT_FILTER_TIME_CH0_3": "Channel 0~3 (ms):", 6 | "LABEL_DI_INPUT_FILTER_TIME_CH4_7": "Channel 4~7 (ms):", 7 | "LABEL_DI_INPUT_FILTER_TIME_CH8_11": "Channel 8~11 (ms):", 8 | "LABEL_DI_INPUT_FILTER_TIME_CH12_15": "Channel 12~15 (ms):", 9 | "LABEL_DQ_LOST_CONNECTION": "Reaction to lost connection to IOT:", 10 | "TIME_2": "0.2", 11 | "TIME_3": "0.4", 12 | "TIME_4": "0.8", 13 | "TIME_5": "1.6", 14 | "TIME_6": "3.2", 15 | "TIME_7": "6.4", 16 | "TIME_9": "12.8", 17 | "DISCONN_2": "Keep last value", 18 | "DISCONN_3": "Use substitute value of 1" 19 | } 20 | -------------------------------------------------------------------------------- /recipes-app/iot2050-conf-webui/files/src/lib/uiString/SM1231_AI.json: -------------------------------------------------------------------------------- 1 | { 2 | "DESC_MOD_4CH": "Analog input module AI4 x 13 bits", 3 | "DESC_MOD_8CH": "Analog input module AI8 x 13 bits", 4 | "LABEL_POWER_ALARM": "Enable module 24V DC power supply diagnostics", 5 | "LABEL_TYPE": "Measurement type:", 6 | "LABEL_RANGE_VOL": "Voltage range:", 7 | "LABEL_RANGE_CUR": "Current range:", 8 | "LABEL_INT_TIME": "Set integration time for noise reduction:", 9 | "LABEL_SMOOTH": "Smoothing:", 10 | "LABEL_OPEN_WIRE_ALARM": "Enable broken wire diagnostics", 11 | "LABEL_OVER_FLOW_ALARM": "Enable overflow diagnostics", 12 | "LABEL_UNDER_FLOW_ALARM": "Enable underflow diagnostics", 13 | "TYPE_1": "Voltage", 14 | "TYPE_3": "Current", 15 | "RANGE_2": "0..20mA", 16 | "RANGE_3": "4..20mA", 17 | "RANGE_7": "+/-2.5V", 18 | "RANGE_8": "+/-5V", 19 | "RANGE_9": "+/-10V", 20 | "INT_TIME_0": "400 Hz (2.5ms)", 21 | "INT_TIME_1": "60 Hz (16.6ms)", 22 | "INT_TIME_2": "50 Hz (20ms)", 23 | "INT_TIME_3": "10 Hz (100ms)", 24 | "SMOOTH_0": "None (1 cycle)", 25 | "SMOOTH_1": "Weak (4 cycles)", 26 | "SMOOTH_2": "Medium (16 cycles)", 27 | "SMOOTH_3": "Strong (32 cycles)" 28 | } -------------------------------------------------------------------------------- /recipes-app/iot2050-efivarfs-helper/iot2050-efivarfs-helper_0.1.bb: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) Siemens AG, 2023 3 | # 4 | # Authors: 5 | # Su Bao Cheng 6 | # 7 | # This file is subject to the terms and conditions of the MIT License. See 8 | # COPYING.MIT file in the top-level directory. 9 | # 10 | inherit dpkg-raw 11 | 12 | DESCRIPTION = "Efivarfs Helper" 13 | MAINTAINER = "baocheng.su@siemens.com" 14 | 15 | SRC_URI = "file://iot2050-efivarfs-helper.tmpl" 16 | 17 | TEMPLATE_FILES = "iot2050-efivarfs-helper.tmpl" 18 | 19 | DEBIAN_DEPENDS = "python3, python3-pystemd" 20 | 21 | do_install() { 22 | install -v -d ${D}/usr/sbin/ 23 | install -v -m 755 ${WORKDIR}/iot2050-efivarfs-helper ${D}/usr/sbin/ 24 | } 25 | -------------------------------------------------------------------------------- /recipes-app/iot2050-eio-manager/files/bin/.gitignore: -------------------------------------------------------------------------------- 1 | iot2050-eiofsd 2 | map3-fw.bin 3 | firmware-version 4 | -------------------------------------------------------------------------------- /recipes-app/iot2050-eio-manager/files/bin/README.md: -------------------------------------------------------------------------------- 1 | # Binaries for EIO subsystem 2 | 3 | At the moment, there are below binaries for EIO subsystem: 4 | 5 | - `iot2050-eiofsd`: EIO FUSE filesystem daemon. 6 | - `map3-fw.bin`: EIO controller firmware. 7 | - `firmware-version`: EIO firmware update control file. 8 | 9 | Make sure above files are present in this folder before building the EIO 10 | subsystem support. Check the top level README.md for details of obtaining them. 11 | -------------------------------------------------------------------------------- /recipes-app/iot2050-eio-manager/files/config-schema/schema-na.yaml: -------------------------------------------------------------------------------- 1 | # Copyright (c) Siemens AG, 2023 2 | # 3 | # Authors: 4 | # Su Bao Cheng 5 | # 6 | # SPDX-License-Identifier: MIT 7 | $schema: 'https://json-schema.org/draft/2020-12/schema' 8 | $id: 'https://iot2050-sm/sm-na' 9 | 10 | type: object 11 | properties: 12 | description: 13 | type: string 14 | mlfb: 15 | const: "NA" 16 | 17 | required: 18 | - mlfb 19 | 20 | unevaluatedProperties: false 21 | -------------------------------------------------------------------------------- /recipes-app/iot2050-eio-manager/files/config-schema/schema-sm-sens-di.yaml: -------------------------------------------------------------------------------- 1 | # Copyright (c) Siemens AG, 2024 2 | # 3 | # Authors: 4 | # Su Bao Cheng 5 | # 6 | # SPDX-License-Identifier: MIT 7 | $schema: 'https://json-schema.org/draft/2020-12/schema' 8 | $id: 'https://iot2050-sm/sm-sens-di' 9 | 10 | type: object 11 | properties: 12 | description: 13 | type: string 14 | mlfb: 15 | const: "6ES7647-0CM00-1AA2" 16 | 17 | required: 18 | - mlfb 19 | 20 | unevaluatedProperties: false 21 | -------------------------------------------------------------------------------- /recipes-app/iot2050-eio-manager/files/config-schema/schema-sm1221-8di.yaml: -------------------------------------------------------------------------------- 1 | # Copyright (c) Siemens AG, 2024 2 | # 3 | # Authors: 4 | # Li Hua Qian 5 | # 6 | # SPDX-License-Identifier: MIT 7 | $schema: 'https://json-schema.org/draft/2020-12/schema' 8 | $id: 'https://iot2050-sm/sm1221-8di' 9 | 10 | type: object 11 | properties: 12 | description: 13 | type: string 14 | mlfb: 15 | const: "6ES7221-1BF32-0XB0" 16 | di: 17 | type: object 18 | properties: 19 | ch0_3_delay_time: 20 | enum: [2, 3, 4, 5, 6, 7, 9] 21 | ch4_7_delay_time: 22 | enum: [2, 3, 4, 5, 6, 7, 9] 23 | required: 24 | - ch0_3_delay_time 25 | - ch4_7_delay_time 26 | unevaluatedProperties: false 27 | 28 | required: 29 | - mlfb 30 | - di 31 | 32 | unevaluatedProperties: false 33 | -------------------------------------------------------------------------------- /recipes-app/iot2050-eio-manager/files/config-template/mlfb-6ES7221-1BF32-0XB0.yaml: -------------------------------------------------------------------------------- 1 | # Copyright (c) Siemens AG, 2024 2 | # 3 | # Authors: 4 | # Li Hua Qian 5 | # 6 | # SPDX-License-Identifier: MIT 7 | # 8 | # This is an example config file for IOT2050-SM signal modules to demonstrate 9 | # how to config the external signal modules via YAML config file 10 | # 11 | description: | 12 | SM1221-8DI (8-channel digital input and 8-channel output module) 13 | 14 | Configuration Items: 15 | 16 | 0. MLFB 17 | 18 | Must be "6ES7221-1BF32-0XB0" 19 | 20 | 1. Digital inputs 21 | 22 | - di.ch0_3_delay_time: 23 | Input delay time of di channel 0 ~ channel 3 24 | 25 | value options: 26 | - 2: 0.2 msec 27 | - 3: 0.4 msec 28 | - 4: 0.8 msec 29 | - 5: 1.6 msec 30 | - 6: 3.2 msec 31 | - 7: 6.4 msec 32 | - 9: 12.8 msec 33 | 34 | - di.ch4_7_delay_time: 35 | input delay time of di channel 4 ~ channel 7 36 | 37 | value options: same as di.ch0_3_delay_time 38 | 39 | mlfb: "6ES7221-1BF32-0XB0" 40 | 41 | di: 42 | ch0_3_delay_time: 9 43 | ch4_7_delay_time: 9 44 | -------------------------------------------------------------------------------- /recipes-app/iot2050-eio-manager/files/config-template/mlfb-6ES7647-0CM00-1AA2.yaml: -------------------------------------------------------------------------------- 1 | # Copyright (c) Siemens AG, 2024 2 | # 3 | # SPDX-License-Identifier: MIT 4 | # 5 | # This is an example config file for IOT2050-SM signal modules to demonstrate 6 | # how to config the external signal modules via YAML config file 7 | # 8 | description: | 9 | SM SENS DI module 10 | 11 | Configuration Items: 12 | 13 | 0. MLFB 14 | 15 | Must be "6ES7647-0CM00-1AA2" 16 | 17 | There is no configuration entry for this module other than mlfb. 18 | 19 | mlfb: "6ES7647-0CM00-1AA2" 20 | -------------------------------------------------------------------------------- /recipes-app/iot2050-eio-manager/files/config-template/mlfb-NA.yaml: -------------------------------------------------------------------------------- 1 | # Copyright (c) Siemens AG, 2023 2 | # 3 | # SPDX-License-Identifier: MIT 4 | # 5 | # This is an example config file for IOT2050-SM signal modules to demonstrate 6 | # how to config the external signal modules via YAML config file 7 | # 8 | description: | 9 | No module for this slot 10 | 11 | mlfb: "NA" 12 | -------------------------------------------------------------------------------- /recipes-app/iot2050-eio-manager/files/iot2050-eio-fwu-monitor.service: -------------------------------------------------------------------------------- 1 | # Copyright (c) Siemens AG, 2023 2 | # 3 | # SPDX-License-Identifier: MIT 4 | 5 | [Unit] 6 | Description=IOT2050 Extended IO Firmware Version Monitoring 7 | # Only run on IOT2050-SM variant 8 | ConditionFirmware=device-tree-compatible(siemens,iot2050-advanced-sm) 9 | 10 | [Service] 11 | Type=simple 12 | ExecStart=/usr/bin/python3 -u /usr/bin/iot2050-eio-fwu-monitor 13 | Restart=always 14 | RestartSec=5 15 | 16 | [Install] 17 | WantedBy=multi-user.target 18 | -------------------------------------------------------------------------------- /recipes-app/iot2050-eio-manager/files/iot2050-eio-time-syncing.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # 3 | # Copyright (c) Siemens AG, 2023 4 | # 5 | # Authors: 6 | # Su Bao Cheng 7 | # 8 | # SPDX-License-Identifier: MIT 9 | import grpc 10 | import time 11 | from gRPC.EIOManager.iot2050_eio_pb2 import SyncTimeRequest 12 | from gRPC.EIOManager.iot2050_eio_pb2_grpc import EIOManagerStub 13 | from iot2050_eio_global import ( 14 | iot2050_eio_api_server, 15 | EIO_TIME_SYNC_INTERVAL 16 | ) 17 | 18 | 19 | def run(): 20 | print(f"Start syncing Extended IO timestamp every {EIO_TIME_SYNC_INTERVAL} seconds.") 21 | while True: 22 | with grpc.insecure_channel(iot2050_eio_api_server) as channel: 23 | stub = EIOManagerStub(channel) 24 | response = stub.SyncTime(SyncTimeRequest()) 25 | print(f"Extended IO timestamp syncing result: {response.status}") 26 | print(f"Extended IO timestamp synced to: {response.message}") 27 | time.sleep(EIO_TIME_SYNC_INTERVAL) 28 | 29 | 30 | if __name__ == "__main__": 31 | run() 32 | -------------------------------------------------------------------------------- /recipes-app/iot2050-eio-manager/files/iot2050-eio-time-syncing.service: -------------------------------------------------------------------------------- 1 | # Copyright (c) Siemens AG, 2023 2 | # 3 | # SPDX-License-Identifier: MIT 4 | 5 | [Unit] 6 | Description=IOT2050 Extended IO Server daemon 7 | # Only run on IOT2050-SM variant 8 | ConditionFirmware=device-tree-compatible(siemens,iot2050-advanced-sm) 9 | 10 | [Service] 11 | Type=simple 12 | ExecStart=/usr/bin/python3 -u /usr/bin/iot2050-eio-time-syncing 13 | Restart=always 14 | RestartSec=5 15 | 16 | [Install] 17 | WantedBy=multi-user.target 18 | -------------------------------------------------------------------------------- /recipes-app/iot2050-eio-manager/files/iot2050-eiod.service: -------------------------------------------------------------------------------- 1 | # Copyright (c) Siemens AG, 2023 2 | # 3 | # SPDX-License-Identifier: MIT 4 | 5 | [Unit] 6 | Description=IOT2050 Extended IO Server daemon 7 | # Only run on IOT2050-SM variant 8 | ConditionFirmware=device-tree-compatible(siemens,iot2050-advanced-sm) 9 | 10 | [Service] 11 | Type=exec 12 | ExecStart=/usr/bin/python3 -u /usr/bin/iot2050-eio-service 13 | StandardOutput=journal+console 14 | StandardError=journal+console 15 | 16 | [Install] 17 | WantedBy=multi-user.target 18 | -------------------------------------------------------------------------------- /recipes-app/iot2050-eio-manager/files/iot2050-eiofsd.service: -------------------------------------------------------------------------------- 1 | # Copyright (c) Siemens AG, 2023 2 | # 3 | # SPDX-License-Identifier: MIT 4 | 5 | [Unit] 6 | Description=IOT2050 Extended IO FUSE filesystem daemon 7 | # Only run on IOT2050-SM variant 8 | ConditionFirmware=device-tree-compatible(siemens,iot2050-advanced-sm) 9 | 10 | [Service] 11 | Type=forking 12 | ExecStart=/usr/bin/iot2050-eiofsd /eiofs 13 | Restart=on-failure 14 | 15 | [Install] 16 | WantedBy=multi-user.target 17 | -------------------------------------------------------------------------------- /recipes-app/iot2050-eio-manager/files/iot2050_eio_event.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # 3 | # Copyright (c) Siemens AG, 2023 4 | # 5 | # Authors: 6 | # Li Hua Qian 7 | # 8 | # SPDX-License-Identifier: MIT 9 | # 10 | from iot2050_eio_global import EIO_FS_EVENT 11 | 12 | 13 | def read_eio_event(): 14 | try: 15 | with open(EIO_FS_EVENT, "r") as f: 16 | event = f.read() 17 | return event 18 | except Exception as e: 19 | raise Exception(f'{type(e).__name__}: {e}') 20 | 21 | -------------------------------------------------------------------------------- /recipes-app/iot2050-event-record/WATCHDOG.md: -------------------------------------------------------------------------------- 1 | This README file explains how to get the watchdog reset status and how to 2 | inject it into `iot2050-event-record` service. 3 | 4 | # How to get the watchdog reset status? 5 | 6 | The `wdt_example.py` below shows how to get the watchdog reset status. 7 | 8 | ```py 9 | import psutil 10 | import time 11 | from datetime import datetime 12 | 13 | WDIOF_CARDRESET = "32" 14 | WDT_PATH = "/sys/class/watchdog/watchdog0/bootstatus" 15 | 16 | EVENT_STRINGS = { 17 | "wdt": "{} watchdog reset is detected", 18 | "no-wdt": "{} watchdog reset isn't detected" 19 | } 20 | 21 | def record_wdt_events(): 22 | status = "" 23 | with open(WDT_PATH, "r") as f: 24 | status = f.read().strip() 25 | 26 | boot_time = datetime.fromtimestamp(psutil.boot_time()) 27 | if WDIOF_CARDRESET == status: 28 | print(EVENT_STRINGS["wdt"].format(boot_time)) 29 | else: 30 | print(EVENT_STRINGS["no-wdt"].format(boot_time)) 31 | 32 | if __name__ == "__main__": 33 | record_wdt_events() 34 | ``` 35 | 36 | # How to inject it into iot2050-event-record? 37 | 38 | Please refer to [README.md](./README.md). 39 | -------------------------------------------------------------------------------- /recipes-app/iot2050-event-record/files/gRPC/EIOManager: -------------------------------------------------------------------------------- 1 | ../../../iot2050-eio-manager/files/gRPC/EIOManager -------------------------------------------------------------------------------- /recipes-app/iot2050-event-record/files/gRPC/EventInterface/iot2050-event.proto: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) Siemens AG, 2023 3 | * 4 | * Authors: 5 | * Li Hua Qian 6 | * 7 | * SPDX-License-Identifier: MIT 8 | */ 9 | 10 | syntax = "proto3"; 11 | 12 | package eventrecord; 13 | 14 | service EventRecord { 15 | rpc Write (WriteRequest) returns (WriteReply) {} 16 | rpc Read (ReadRequest) returns (ReadReply) {} 17 | } 18 | 19 | /* ----------------- Write event ----------------- */ 20 | /* WriteRequest 21 | * - event_type: a string to present event type 22 | * - "IOT2050_EVENT.xxx" means IOT2050 standard events 23 | * - "" or other strings mean customized events 24 | * - event: the event content to write 25 | */ 26 | message WriteRequest { 27 | string event_type = 1; 28 | string event = 2; 29 | } 30 | 31 | /* WriteReply 32 | * - status: 0 means successful 33 | * others mean error 34 | * - message: the detail write message 35 | */ 36 | message WriteReply { 37 | int32 status = 1; 38 | string message = 2; 39 | } 40 | 41 | /* ----------------- Read event ----------------- */ 42 | /* ReadRequest 43 | * - event_type: a string to present event type 44 | * - "IOT2050_EVENT.xxx" means IOT2050 standard events 45 | * - "" means to all types of events 46 | */ 47 | message ReadRequest { 48 | string event_type = 1; 49 | } 50 | 51 | /* ReadReply 52 | * - status: 0 means successful 53 | * others mean error 54 | * - message: the detail write message 55 | * - event: the read back event content 56 | */ 57 | message ReadReply { 58 | int32 status = 1; 59 | string message = 2; 60 | string event = 3; 61 | } 62 | -------------------------------------------------------------------------------- /recipes-app/iot2050-event-record/files/gRPC/EventInterface/iot2050_event_pb2.pyi: -------------------------------------------------------------------------------- 1 | from google.protobuf import descriptor as _descriptor 2 | from google.protobuf import message as _message 3 | from typing import ClassVar as _ClassVar, Optional as _Optional 4 | 5 | DESCRIPTOR: _descriptor.FileDescriptor 6 | 7 | class WriteRequest(_message.Message): 8 | __slots__ = ["event_type", "event"] 9 | EVENT_TYPE_FIELD_NUMBER: _ClassVar[int] 10 | EVENT_FIELD_NUMBER: _ClassVar[int] 11 | event_type: str 12 | event: str 13 | def __init__(self, event_type: _Optional[str] = ..., event: _Optional[str] = ...) -> None: ... 14 | 15 | class WriteReply(_message.Message): 16 | __slots__ = ["status", "message"] 17 | STATUS_FIELD_NUMBER: _ClassVar[int] 18 | MESSAGE_FIELD_NUMBER: _ClassVar[int] 19 | status: int 20 | message: str 21 | def __init__(self, status: _Optional[int] = ..., message: _Optional[str] = ...) -> None: ... 22 | 23 | class ReadRequest(_message.Message): 24 | __slots__ = ["event_type"] 25 | EVENT_TYPE_FIELD_NUMBER: _ClassVar[int] 26 | event_type: str 27 | def __init__(self, event_type: _Optional[str] = ...) -> None: ... 28 | 29 | class ReadReply(_message.Message): 30 | __slots__ = ["status", "message", "event"] 31 | STATUS_FIELD_NUMBER: _ClassVar[int] 32 | MESSAGE_FIELD_NUMBER: _ClassVar[int] 33 | EVENT_FIELD_NUMBER: _ClassVar[int] 34 | status: int 35 | message: str 36 | event: str 37 | def __init__(self, status: _Optional[int] = ..., message: _Optional[str] = ..., event: _Optional[str] = ...) -> None: ... 38 | -------------------------------------------------------------------------------- /recipes-app/iot2050-event-record/files/iot2050-event-record.conf: -------------------------------------------------------------------------------- 1 | # In IoT2050-SM, there are sensors for tilted and uncovered detection. If you 2 | # want to enable logging of sensor events, i.e. tilted and uncovered events. 3 | # Please copy this file to /etc/systemd/system/iot2050-event-record.service.d/. 4 | # 5 | # RECORD_SENSOR_EVENTS: to start sensor event recording. 6 | # ACCEL_CRITICAL_VALUE: to define the tilting threshold. 7 | # LUX_CRITICAL_VALUE: to define the uncovering threshold. 8 | 9 | [Service] 10 | Environment="RECORD_SENSOR_EVENTS=True" 11 | Environment="ACCEL_CRITICAL_VALUE=1000" 12 | Environment="LUX_CRITICAL_VALUE=100" 13 | -------------------------------------------------------------------------------- /recipes-app/iot2050-event-record/files/iot2050-event-record.service: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) Siemens AG, 2023 3 | # 4 | # This file is subject to the terms and conditions of the MIT License. See 5 | # COPYING.MIT file in the top-level directory. 6 | # 7 | 8 | [Unit] 9 | Description=IOT2050 Event Record daemon 10 | After=iot2050-event-serve.service iot2050-eiod.service 11 | Requires=iot2050-event-serve.service 12 | Wants=iot2050-eiod.service 13 | 14 | [Service] 15 | Type=exec 16 | ExecStart=/usr/bin/iot2050-event-record 17 | Restart=on-failure 18 | RestartSec=5 19 | StandardOutput=journal+console 20 | StandardError=journal+console 21 | 22 | [Install] 23 | WantedBy=multi-user.target 24 | -------------------------------------------------------------------------------- /recipes-app/iot2050-event-record/files/iot2050-event-serve.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # 3 | # Copyright (c) Siemens AG, 2023 4 | # 5 | # Authors: 6 | # Li Hua Qian 7 | # 8 | # SPDX-License-Identifier: MIT 9 | from concurrent import futures 10 | import datetime 11 | import grpc 12 | from iot2050_event import ( 13 | write_event, 14 | read_event, 15 | EventIOError 16 | ) 17 | from iot2050_event_global import ( 18 | EVENT_API_SERVER_HOSTNAME, 19 | EVENT_API_SERVER_PORT 20 | ) 21 | from gRPC.EventInterface.iot2050_event_pb2 import ( 22 | WriteRequest, WriteReply, 23 | ReadRequest, ReadReply 24 | ) 25 | from gRPC.EventInterface.iot2050_event_pb2_grpc import ( 26 | EventRecordServicer, 27 | add_EventRecordServicer_to_server 28 | ) 29 | 30 | 31 | class EventRecordServicer(EventRecordServicer): 32 | 33 | def Write(self, request: WriteRequest, context): 34 | try: 35 | write_event(request.event_type, request.event) 36 | except EventIOError as e: 37 | return WriteReply(status=1, message=f'{e}') 38 | 39 | return WriteReply(status=0, message='OK') 40 | 41 | def Read(self, request: ReadRequest, context): 42 | event = read_event(request.event_type) 43 | 44 | return ReadReply(status=0, message='OK', event=event) 45 | 46 | 47 | def serve(): 48 | iot2050_event_api_server = "{}:{}".format( 49 | EVENT_API_SERVER_HOSTNAME, EVENT_API_SERVER_PORT) 50 | server = grpc.server(futures.ThreadPoolExecutor(max_workers=1)) 51 | add_EventRecordServicer_to_server( 52 | EventRecordServicer(), server 53 | ) 54 | server.add_insecure_port(iot2050_event_api_server) 55 | server.start() 56 | server.wait_for_termination() 57 | 58 | 59 | if __name__ == "__main__": 60 | serve() 61 | -------------------------------------------------------------------------------- /recipes-app/iot2050-event-record/files/iot2050-event-serve.service: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) Siemens AG, 2023 3 | # 4 | # This file is subject to the terms and conditions of the MIT License. See 5 | # COPYING.MIT file in the top-level directory. 6 | # 7 | 8 | [Unit] 9 | Description=IOT2050 Event Record daemon 10 | 11 | [Service] 12 | Type=exec 13 | ExecStart=/usr/bin/iot2050-event-serve 14 | Restart=always 15 | RestartSec=5 16 | StandardOutput=journal+console 17 | StandardError=journal+console 18 | 19 | [Install] 20 | WantedBy=multi-user.target 21 | -------------------------------------------------------------------------------- /recipes-app/iot2050-event-record/files/iot2050_event.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # 3 | # Copyright (c) Siemens AG, 2023 4 | # 5 | # Authors: 6 | # Li Hua Qian 7 | # 8 | # SPDX-License-Identifier: MIT 9 | # 10 | import json 11 | from systemd import journal 12 | from iot2050_event_global import EVENT_IDENTIFIER 13 | 14 | def write_event(event_type, event): 15 | if not event: 16 | raise EventIOError("Empty Events: no events to write") 17 | journal_stream = journal.stream(EVENT_IDENTIFIER) 18 | log_to_record = event_type + ": " + event 19 | journal_stream.write(log_to_record) 20 | 21 | def read_all_events(journal_reader): 22 | events = [] 23 | for entry in journal_reader: 24 | events.append(entry['MESSAGE']) 25 | events_str = json.dumps(events, indent=4) 26 | 27 | return events_str 28 | 29 | def read_specified_event(event_type, journal_reader): 30 | events = [] 31 | for entry in journal_reader: 32 | if event_type in entry['MESSAGE']: 33 | events.append(entry['MESSAGE']) 34 | events_str = json.dumps(events, indent=4) 35 | 36 | return events_str 37 | 38 | def read_event(event_type): 39 | journal_reader = journal.Reader() 40 | journal_reader.add_match("SYSLOG_IDENTIFIER={}".format(EVENT_IDENTIFIER)) 41 | 42 | if not event_type: 43 | return read_all_events(journal_reader) 44 | else: 45 | return read_specified_event(event_type, journal_reader) 46 | 47 | class EventIOError(Exception): 48 | def __init__(self, *args: object) -> None: 49 | super().__init__(*args) 50 | -------------------------------------------------------------------------------- /recipes-app/iot2050-event-record/files/iot2050_event_global.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) Siemens AG, 2023 2 | # 3 | # Authors: 4 | # Li Hua Qian 5 | # 6 | # SPDX-License-Identifier: MIT 7 | 8 | # IOT2050 Event API server hostname 9 | EVENT_API_SERVER_HOSTNAME = 'localhost' 10 | 11 | # IOT2050 Event API server port 12 | EVENT_API_SERVER_PORT = '5050' 13 | 14 | # IOT2050 Event Log identifier 15 | EVENT_IDENTIFIER = 'IOT2050-EventRecord' 16 | 17 | # IOT2050 Extended IO API server hostname 18 | EIO_API_SERVER_HOSTNAME = 'localhost' 19 | 20 | # IOT2050 Extended IO API server port 21 | EIO_API_SERVER_PORT = '5020' 22 | 23 | iot2050_event_api_server = f"{EVENT_API_SERVER_HOSTNAME}:{EVENT_API_SERVER_PORT}" 24 | iot2050_eio_api_server = f"{EIO_API_SERVER_HOSTNAME}:{EIO_API_SERVER_PORT}" 25 | -------------------------------------------------------------------------------- /recipes-app/iot2050-firmware-update/files/update.conf.json.tmpl: -------------------------------------------------------------------------------- 1 | { 2 | "firmware": [ 3 | { 4 | "description": "IOT2050 Bootloader Backup Firmware", 5 | "name": "iot2050-pg-image-boot.bin", 6 | "type": "uboot", 7 | "target_boards": "" 8 | } 9 | ], 10 | "target_os": [ 11 | { 12 | "type": "Example Image", 13 | "key": "BUILD_ID", 14 | "min_version": "V01.01.01" 15 | } 16 | ], 17 | "suggest_preserved_uboot_env": [ 18 | "boot_targets" 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /recipes-app/iot2050-firmware-update/iot2050-firmware-update_0.5.bb: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) Siemens AG, 2020-2023 3 | # 4 | # Authors: 5 | # Chao Zeng 6 | # Li Hua Qian 7 | # 8 | # This file is subject to the terms and conditions of the MIT License. See 9 | # COPYING.MIT file in the top-level directory. 10 | # 11 | 12 | DESCRIPTION = "OSPI Firmware Update Scripts" 13 | MAINTAINER = "chao.zeng@siemens.com" 14 | 15 | SRC_URI = " \ 16 | file://update.conf.json.tmpl \ 17 | file://iot2050-firmware-update.tmpl" 18 | 19 | TEMPLATE_FILES = "update.conf.json.tmpl iot2050-firmware-update.tmpl" 20 | 21 | DPKG_ARCH = "any" 22 | 23 | inherit dpkg-raw 24 | 25 | DEBIAN_DEPENDS = "python3-progress, u-boot-tools" 26 | 27 | do_install() { 28 | install -v -d ${D}/usr/sbin/ 29 | install -v -m 755 ${WORKDIR}/iot2050-firmware-update ${D}/usr/sbin/ 30 | 31 | install -v -d ${D}/usr/share/iot2050/fwu 32 | install -v -m 644 ${WORKDIR}/update.conf.json ${D}/usr/share/iot2050/fwu/ 33 | } 34 | 35 | do_deploy_deb:append() { 36 | cp -f "${WORKDIR}/${PN}_${PV}_arm64.deb" "${DEPLOY_DIR_IMAGE}/" 37 | } 38 | 39 | do_deploy_deb[dirs] = "${DEPLOY_DIR_IMAGE}" 40 | -------------------------------------------------------------------------------- /recipes-app/iot2050-module-firmware-update/iot2050-module-firmware-update_01.bb: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) Siemens AG, 2024 3 | # 4 | # Authors: 5 | # Li Hua Qian 6 | # 7 | # This file is subject to the terms and conditions of the MIT License. See 8 | # COPYING.MIT file in the top-level directory. 9 | # 10 | 11 | DESCRIPTION = "IOT2050 Customized External Signal Module Firmware Update" 12 | MAINTAINER = "huaqian.li@siemens.com" 13 | 14 | SRC_URI = " \ 15 | file://iot2050-module-firmware-update.tmpl" 16 | 17 | TEMPLATE_FILES = "iot2050-module-firmware-update.tmpl" 18 | 19 | inherit dpkg-raw 20 | 21 | do_install() { 22 | install -v -d ${D}/usr/sbin/ 23 | install -v -m 755 ${WORKDIR}/iot2050-module-firmware-update ${D}/usr/sbin/ 24 | } 25 | 26 | do_deploy_deb[dirs] = "${DEPLOY_DIR_IMAGE}" 27 | -------------------------------------------------------------------------------- /recipes-app/mindconnect-node-red-contrib-mindconnect/mindconnect-node-red-contrib-mindconnect_3.12.1.bb: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) Siemens AG, 2020-2023 3 | # 4 | # Authors: 5 | # Jan Kiszka 6 | # 7 | # This file is subject to the terms and conditions of the MIT License. See 8 | # COPYING.MIT file in the top-level directory. 9 | # 10 | 11 | inherit npm 12 | inherit node-red-module 13 | 14 | DESCRIPTION = "node red mindconnect node using mindconnect-nodejs library" 15 | 16 | NPMPN = "@mindconnect/node-red-contrib-mindconnect" 17 | -------------------------------------------------------------------------------- /recipes-app/mraa/files/0002-common-increase-pin-name-size.patch: -------------------------------------------------------------------------------- 1 | From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 2 | From: Benedikt Niedermayr 3 | Date: Mon, 27 Feb 2023 16:31:13 +0100 4 | Subject: [PATCH] common: increase pin name size 5 | 6 | Some pin names are longer than 12 characters. 7 | 32 characters should be enough while consuming not too 8 | much space. 9 | 10 | Signed-off-by: Benedikt Niedermayr 11 | --- 12 | api/mraa/common.h | 2 +- 13 | 1 file changed, 1 insertion(+), 1 deletion(-) 14 | 15 | diff --git a/api/mraa/common.h b/api/mraa/common.h 16 | index 6675f2d15771..13df2f1681fe 100644 17 | --- a/api/mraa/common.h 18 | +++ b/api/mraa/common.h 19 | @@ -32,7 +32,7 @@ 20 | /** Max size off Mraa Platform name */ 21 | #define MRAA_PLATFORM_NAME_MAX_SIZE 64 22 | /** Size off Mraa pin name */ 23 | -#define MRAA_PIN_NAME_SIZE 12 24 | +#define MRAA_PIN_NAME_SIZE 32 25 | 26 | /** Bit Shift for Mraa sub platform */ 27 | #define MRAA_SUB_PLATFORM_BIT_SHIFT 9 28 | -------------------------------------------------------------------------------- /recipes-app/mraa/files/rules: -------------------------------------------------------------------------------- 1 | #!/usr/bin/make -f 2 | 3 | export JAVA_HOME=/usr/lib/jvm/default-java 4 | 5 | %: 6 | dh $@ 7 | 8 | override_dh_auto_test: 9 | echo "skipping test" 10 | 11 | override_dh_auto_configure: 12 | dh_auto_configure -- -DBUILDSWIGJAVA=ON -DBUILDSWIGNODE=ON 13 | 14 | override_dh_install: 15 | dh_install 16 | mv debian/mraa/usr/lib/lib/java debian/mraa/usr/share/ 17 | rmdir debian/mraa/usr/lib/lib 18 | -------------------------------------------------------------------------------- /recipes-app/mraa/mraa_2.2.0+git20220805.8b1c5493.bb: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) Siemens AG, 2019-2023 3 | # 4 | # Authors: 5 | # Le Jin 6 | # 7 | # This file is subject to the terms and conditions of the MIT License. See 8 | # COPYING.MIT file in the top-level directory. 9 | # 10 | 11 | PR = "1" 12 | 13 | inherit dpkg 14 | 15 | DESCRIPTION = "Low Level Skeleton Library for Communication on GNU/Linux platforms" 16 | MAINTAINER = "le.jin@siemens.com" 17 | SRC_URI += "git://github.com/eclipse/mraa.git;protocol=https;branch=master \ 18 | file://0001-gpio-Fix-JS-binding-regarding-interrupt-injections.patch \ 19 | file://0002-common-increase-pin-name-size.patch \ 20 | file://0003-iot2050-add-debugfs-pinmux-support.patch \ 21 | file://0004-iot2050-Add-support-for-the-new-IOT2050-SM-variant.patch \ 22 | file://rules" 23 | 24 | CHANGELOG_V = "${PV}-${PR}" 25 | SRCREV = "8b1c54934e80edc2d36abac9d9c96fe1e01cb669" 26 | 27 | S = "${WORKDIR}/git" 28 | 29 | DEBIAN_BUILD_DEPENDS = " \ 30 | cmake, \ 31 | swig4.0, \ 32 | libpython3-dev, \ 33 | nodejs, \ 34 | libnode-dev, \ 35 | libjson-c-dev, \ 36 | default-jdk:native" 37 | 38 | DEBIAN_DEPENDS = "python3, nodejs, \${shlibs:Depends}" 39 | 40 | do_prepare_build[cleandirs] += "${S}/debian" 41 | 42 | do_prepare_build() { 43 | deb_debianize 44 | 45 | echo "usr/share/java/mraa.jar usr/share/java/mraa-${PV}.jar" > ${S}/debian/mraa.links 46 | } 47 | -------------------------------------------------------------------------------- /recipes-app/node-red-contrib-modbus/node-red-contrib-modbus_5.26.0.bb: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) Siemens AG, 2020-2023 3 | # 4 | # Authors: 5 | # Jan Kiszka 6 | # 7 | # This file is subject to the terms and conditions of the MIT License. See 8 | # COPYING.MIT file in the top-level directory. 9 | # 10 | 11 | inherit npm 12 | inherit node-red-module 13 | 14 | DESCRIPTION = "The all in one Modbus TCP and Serial contribution package for Node-RED" 15 | 16 | do_prepare_build:append() { 17 | sed -i '/override_dh_install:/a\\trm -r ${PP}/image/${NPM_LOCAL_INSTALL_DIR}/node_modules/node-red-contrib-modbus/node_modules/serialport/node_modules/@serialport/bindings-cpp/prebuilds' \ 18 | ${S}/debian/rules 19 | } 20 | -------------------------------------------------------------------------------- /recipes-app/node-red-contrib-opcua/node-red-contrib-opcua_0.2.309.bb: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) Siemens AG, 2020-2023 3 | # 4 | # Authors: 5 | # Jan Kiszka 6 | # 7 | # This file is subject to the terms and conditions of the MIT License. See 8 | # COPYING.MIT file in the top-level directory. 9 | # 10 | 11 | inherit npm 12 | inherit node-red-module 13 | 14 | DESCRIPTION = "A Node-RED node to communicate via OPC UA based on node-opcua library" 15 | 16 | do_prepare_build:append() { 17 | # x86-64 binary that breaks Debian packaging. 18 | # Fortunately only needed for npm release packaging. 19 | rm -f ${D}/${NPM_LOCAL_INSTALL_DIR}/node_modules/node-red-contrib-opcua/node_modules/node-opcua-pki/pkg/pki 20 | } 21 | -------------------------------------------------------------------------------- /recipes-app/node-red-contrib-s7/files/npm-shrinkwrap.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "root", 3 | "lockfileVersion": 3, 4 | "requires": true, 5 | "packages": { 6 | "": { 7 | "dependencies": { 8 | "node-red-contrib-s7": "^3.1.0" 9 | } 10 | }, 11 | "node_modules/node-red-contrib-s7": { 12 | "version": "3.1.0", 13 | "resolved": "https://registry.npmjs.org/node-red-contrib-s7/-/node-red-contrib-s7-3.1.0.tgz", 14 | "integrity": "sha512-5ETqfO7bEVZQZ9IJ85INGU6fIfh/BnQL7vx1PYz1Uk/Z/wF4+9PLabOI3SN3UEudjnbJyCU5PlgVcm0DwLhhZg==", 15 | "dependencies": { 16 | "@st-one-io/nodes7": "1.1.0" 17 | } 18 | }, 19 | "node_modules/node-red-contrib-s7/node_modules/@st-one-io/nodes7": { 20 | "version": "1.1.0", 21 | "resolved": "https://registry.npmjs.org/@st-one-io/nodes7/-/nodes7-1.1.0.tgz", 22 | "integrity": "sha512-Ds5srgWRWgBTEfIxBSCjaKt87w3EOqAGdjaRmnJpflg9Ah0WafjsqOC3cwX074Fuo16398l3JCxdJqXGkk2LQQ==", 23 | "dependencies": { 24 | "iso-on-tcp": "^0.1.0" 25 | } 26 | }, 27 | "node_modules/node-red-contrib-s7/node_modules/iso-on-tcp": { 28 | "version": "0.1.0", 29 | "resolved": "https://registry.npmjs.org/iso-on-tcp/-/iso-on-tcp-0.1.0.tgz", 30 | "integrity": "sha512-ty4/0A+4qW35QoPE74GfUiMtIBtTN4ZENNqfD0+5GQIoOnjLvmzCC1pCRWwlhopdSGZGmza9bBxdOuVmzlpN7g==" 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /recipes-app/node-red-contrib-s7/node-red-contrib-s7_3.1.0.bb: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) Siemens AG, 2020-2023 3 | # 4 | # Authors: 5 | # Jan Kiszka 6 | # 7 | # This file is subject to the terms and conditions of the MIT License. See 8 | # COPYING.MIT file in the top-level directory. 9 | # 10 | 11 | inherit npm 12 | inherit node-red-module 13 | 14 | DESCRIPTION = "A Node-RED node to interact with Siemens S7 PLCs" 15 | -------------------------------------------------------------------------------- /recipes-app/node-red-dashboard/node-red-dashboard_3.5.0.bb: -------------------------------------------------------------------------------- 1 | # 2 | # Copyright (c) Siemens AG, 2020-2023 3 | # 4 | # Authors: 5 | # Jan Kiszka 6 | # 7 | # This file is subject to the terms and conditions of the MIT License. See 8 | # COPYING.MIT file in the top-level directory. 9 | # 10 | 11 | inherit npm 12 | inherit node-red-module 13 | 14 | DESCRIPTION = "A set of dashboard nodes for Node-RED" 15 | -------------------------------------------------------------------------------- /recipes-app/node-red-gpio/files/0003-mraa-gpio-din-Make-D14-D19-IOT2050-only.patch: -------------------------------------------------------------------------------- 1 | From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 2 | From: Baocheng Su 3 | Date: Thu, 28 Dec 2023 09:56:02 +0800 4 | Subject: [PATCH] mraa-gpio: din: Make D14-D19 IOT2050 only 5 | 6 | Pins D14-D19 are IOT2050 only. 7 | 8 | Fixes: 25d7d668ef11 ("Add IOT2050 board into mraa Intel nodes (#940)") 9 | Signed-off-by: Baocheng Su 10 | --- 11 | hardware/intel/mraa-gpio-din.html | 9 +++------ 12 | 1 file changed, 3 insertions(+), 6 deletions(-) 13 | 14 | diff --git a/hardware/intel/mraa-gpio-din.html b/hardware/intel/mraa-gpio-din.html 15 | index c7fb92e0e9b4..a22cb05b3617 100644 16 | --- a/hardware/intel/mraa-gpio-din.html 17 | +++ b/hardware/intel/mraa-gpio-din.html 18 | @@ -22,6 +22,9 @@ 19 | }, 20 | oneditprepare: function() { 21 | if (RED.settings.mraaGpioDinBoardType === "IOT2050") { 22 | + for (let i = 14; i <= 19; i++) { 23 | + $('#node-input-pin').append($("").attr("value", i).text("D" + i)); 24 | + } 25 | $('#node-input-pin').append($("").attr("value", 20).text("USER button")); 26 | } 27 | $('#node-input-pin').val(this.pin); 28 | @@ -50,12 +53,6 @@ 29 | 30 | 31 | 32 | - 33 | - 34 | - 35 | - 36 | - 37 | - 38 | 39 | 40 |
41 | -------------------------------------------------------------------------------- /recipes-app/node-red-gpio/files/0004-mraa-gpio-din-Fix-the-for-attribute-of-lables.patch: -------------------------------------------------------------------------------- 1 | From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 2 | From: Baocheng Su 3 | Date: Thu, 28 Dec 2023 09:59:51 +0800 4 | Subject: [PATCH] mraa-gpio: din: Fix the 'for' attribute of lables 5 | 6 | Seems no significant impact on the UI, however it's against the 7 | html standard. 8 | 9 | Fixes: 983dafff137f ("mraa gpio din features (#929)") 10 | Signed-off-by: Baocheng Su 11 | --- 12 | hardware/intel/mraa-gpio-din.html | 4 ++-- 13 | 1 file changed, 2 insertions(+), 2 deletions(-) 14 | 15 | diff --git a/hardware/intel/mraa-gpio-din.html b/hardware/intel/mraa-gpio-din.html 16 | index a22cb05b3617..225aa47690d3 100644 17 | --- a/hardware/intel/mraa-gpio-din.html 18 | +++ b/hardware/intel/mraa-gpio-din.html 19 | @@ -56,7 +56,7 @@ 20 | 21 |
22 |
23 | - 24 | + 25 | 30 |
31 |
32 | - 33 | + 34 |