Commit Graph

5320 Commits

Author SHA1 Message Date
Arturo Buzarra b2eb7a5825 meta-digi: update revisions for dey-5.0-r2.2
Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
2025-07-15 22:10:11 +02:00
Arturo Buzarra 915b235f5a meta-digi-dey: bump distro version to 5.0-r2.2
Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
2025-07-15 22:10:11 +02:00
Francisco Gil afe37daf98 README: update known issues and limitations for dey-5.0-r2
Signed-off-by: Francisco Gil <francisco.gilmartinez@digi.com>
2025-07-15 15:49:34 +02:00
Hector Palacios 656a23cd42 sysinfo: properly format table header row for markdown
Signed-off-by: Hector Palacios <hector.palacios@digi.com>
2025-07-09 12:06:45 +02:00
Tatiana Leon 4f8ed2d434 cccs: ccimx6ul: drop exception for `data` partition and client certificates
Until DEY 5.0, the ccimx6ul platform was the only one that did not include a
`data` partition.
As a result, `cccsd` had to store the client certificate from Remote Manager in
the root filesystem, under `/etc/ssl/certs` by default.

This setup caused issues after a software update, as the received client
certificate would be lost, making the device unable to reconnect to the server
until the certificate was manually reset from Remote Manager.
The same problem occurred in dual-boot systems, since the certificate was stored
in the rootfs of the current bank and was not accessible from the other bank.

To avoid this situation, the ccimx6ul used the `remotemanager.digi.com` endpoint
instead of `edp12.devicecloud.com`, as the former does not support or deliver
client certificates.

Now that DEY 5.0 includes a `data` partition in the ccimx6ul partition table, we
can remove this exception and allow the use of `edp12.devicecloud.com`, storing
the certificates persistently in the `data` partition.

Signed-off-by: Tatiana Leon <Tatiana.Leon@digi.com>
2025-07-09 12:06:45 +02:00
Hector Palacios c17af3fd47 installers: cc6ul: format 'update' and 'data' partitions
On the multi-MTD layout (default) the 'data' UBI volume is never created
and thus not mounted by the system. This is because with this layout, the
creation of the UBI volume is done by the 'update' command, but nobody
updates this partition cause DEY doesn't generate an image for it.

We want the 'data' UBI volume to be created so that the CC6UL can connect
to the regular Remote Manager URI and store the certificate in it.
As long as a UBI volume is created, Linux will mount it, so this commit
erases the partition and creates the UBI volume.

The same goes for the 'update' partition. The installer was relying on the
recovery mechanism to wipe this partition, but this is not longer required
with UBI. As long as the installer erases the partition and creates the
volume, Linux will be able to mount it, so the boot in recovery mode has
been removed from the script.

Note: the formatting is only done for multi-MTD layout; the ubivolscript
creates all volumes for single-MTD layout.

Signed-off-by: Hector Palacios <hector.palacios@digi.com>
2025-07-09 12:06:45 +02:00
Gonzalo Ruiz 850f75f238 README: add comment about CC9 rgpower files
https://onedigi.atlassian.net/browse/DEL-8974

Signed-off-by: Gonzalo Ruiz <Gonzalo.Ruiz@digi.com>
2025-07-09 10:10:13 +02:00
Gonzalo Ruiz 822f38e1d0 kernel-module-nxp-wlan: cc9: select V2 TX power method
Set V2 TX power method for regulatory management on the iw612 init
and remove the 'txpwrlimit_cfg' and 'init_hostcmd_cfg' driver
parameters which are only used for V1 TX power method.

This allows the driver to load a specific rgpower_XX.bin binary file
contained in the rootfs whenever command "iw reg set XX" is executed,
updating the TX power settings and allowed frequencies list to those
contained in the file. 'XX' stands for the 2-character ISO3166-1
alpha-2 country code.

If the selected rgpower_XX.bin file does not exist, or no country is
selected, the driver will load rgpower_WW.bin (Worldwide) by default.

https://onedigi.atlassian.net/browse/DEL-8974

Signed-off-by: Gonzalo Ruiz <Gonzalo.Ruiz@digi.com>
2025-07-09 10:10:13 +02:00
Gonzalo Ruiz bd31fd3ef4 firmware-murata-nxp: cc9: add rgpower files
Do not install 'txpower' and 'rutxpower' files from the Murata repo,
which are used for the V1 TX power method, and replace them with custom
'rgpower' files, required for the V2 TX power method.

These files encode the TxPower limitations obtained during the
ConnectCore 93 Certification tests, and there is one file per supported
country. There is a common file for all the European countries, so
create links for each of them, based on the CEPT REC7003E recommendation.

New 'rgpower' files:
- rgpower_CA.bin (MD5SUM: 7c012351f0521a02e3d78615fed5eb54)
- rgpower_EU.bin (MD5SUM: 4d1a54b3c1f12a7d0bb44d0337786a0b)
- rgpower_JP.bin (MD5SUM: b7706bb2718997d933b2bdf1e53e64b4)
- rgpower_US.bin (MD5SUM: 16555f962b025e0426098decd0147f1f)
- rgpower_WW.bin (MD5SUM: 505223c56527e849d4b1e5800c8613b5)

Take the opportunity to just install bt_power_config scripts and prevent
the installation of other unused files (db.txt, ed_mac_ctrl_V2_nw61x.conf
and regulatory.db) from the Murata repository.

https://onedigi.atlassian.net/browse/DEL-8974

Signed-off-by: Gonzalo Ruiz <Gonzalo.Ruiz@digi.com>
2025-07-09 10:10:13 +02:00
Arturo Buzarra 756957e280 x-linux-ai: recipes-samples: fix broken webcam support after latest release
The latest X-LINUX-AI v6.0.1 release consolidated the config_board_npu.sh
script across all STM32MP2x platforms with NPU support. As part of this
consolidation, the supported video resolutions were unified under a single
default setting, which does not work correctly with USB webcams.

This commit updates Digi’s custom patch to adjust the internal resolution used
for processing video streams from webcams, ensuring proper support and
functionality.

https://onedigi.atlassian.net/browse/DEL-9721

Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
2025-07-08 15:43:00 +02:00
Arturo Buzarra bf15b1ae91 x-linux-ai: recipes-samples: move Digi webcam patch to config-npu bbappend
Since the release of X-LINUX-AI v6.0.1, AI support has been split between
devices with NPU and those relying solely on CPU. As a result, the Digi custom
patch to enable USB webcam support was no longer applied, because the
config_board_npu.sh script is now handled by the new config-npu.bb recipe.

This commit addresses the issue by introducing a new bbappend for config-npu,
ensuring that the webcam-related patch is correctly applied for NPU-enabled
platforms.

https://onedigi.atlassian.net/browse/DEL-9721

Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
2025-07-08 15:34:11 +02:00
Hector Palacios 9bf8359a3d installer-media: restore INSTALL_UBOOT_FILENAME variable
Commit ac69566ecd mistakenly removed
the command of cc9, cc8x, and cc8m media installers that sets the
variable that contains the U-Boot file to install.

Signed-off-by: Hector Palacios <hector.palacios@digi.com>

https://onedigi.atlassian.net/browse/DEL-9720
2025-07-07 18:19:38 +02:00
Hector Palacios 1e726ebcf5 installer media: use INSTALL_MEDIA variable value, not name
At the point of saving the bootcmd for the second stage of the install
process we want to use the variable value, not the variable name
since this variable doesn't exist after the environment is reset.

Signed-off-by: Hector Palacios <hector.palacios@digi.com>

https://onedigi.atlassian.net/browse/DEL-9711
2025-07-07 07:27:17 +02:00
Arturo Buzarra 6858f8aa25 meta-digi: revert revisions to AUTOREV
Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
2025-07-04 11:15:42 +02:00
Arturo Buzarra 15dee0005e meta-digi: update revisions for dey-5.0-r2.1
Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
2025-07-04 11:15:37 +02:00
Arturo Buzarra 51e97057c9 ccmp15-dvk: enable support for dey-image-flutter
This commit enables building dey-image-flutter for the ConnectCore MP15
platform. It integrates the necessary configurations to support Flutter-based
graphical applications on this platform.

Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
2025-07-03 14:33:39 +02:00
Javier Viguera 5c96ae3ecd base-files: fix sysctl config installation on systemd-based systems
Systemd-based systems do not use the global /etc/sysctl.conf file. Instead,
they read configuration from individual files under /etc/sysctl.d. This
change installs our sysctl settings as /etc/sysctl.d/console.conf when
systemd is enabled.

For systems that do not use systemd, the configuration file is still
installed at /etc/sysctl.conf. The CONFFILES entry is also updated.

Signed-off-by: Javier Viguera <javier.viguera@digi.com>
2025-07-03 13:48:32 +02:00
Javier Viguera b581ac2a3b u-boot: rework deploy symlinks using uboot_deploy_config
Use the existing uboot_deploy(_spl)_config function to clean up and rework
the symlinks created in the deploy directory.

Signed-off-by: Javier Viguera <javier.viguera@digi.com>
2025-07-03 13:48:32 +02:00
Arturo Buzarra 6997b8aa57 README: dey-5.0-r2 release notes
https://onedigi.atlassian.net/browse/DEL-9688

Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
2025-07-02 22:15:47 +02:00
Hector Palacios 318374f11d dey-installer: add signed/encrypted bootloader to installer zip
On NXP platforms, the signed/encrypted bootloader images are not
included on the installer ZIP. This prevents from using the installer
when TrustFence is enabled.

This commit adds to the installer:
 - If encryption is enabled
   - encrypted bootloader
   - signed bootloader (for USB recovery boot)
 - If encryption is disabled
   - signed bootloader
 - If TrustFence is disabled
   - non-signed bootloader

It also treats the ccimx6ul special, as this has a dedicated file for
USB recovery boot.

Signed-off-by: Hector Palacios <hector.palacios@digi.com>

https://onedigi.atlassian.net/browse/DEL-9698
2025-07-02 21:17:24 +02:00
Hector Palacios 41810d5c17 installers: add missing ##SIGNED## placeholder to uboot filenames
This gets substituted when TrustFence is enabled to "signed/encrypted"
or removed when TrustFence is disabled.

Signed-off-by: Hector Palacios <hector.palacios@digi.com>
2025-07-02 21:17:24 +02:00
Hector Palacios 9672b2a80a installer: uuu: prevent installing encrypted uboot on open device
Programming an encrypted bootloader can only be done after the
secure keys have been programed on the OTP bits, and the device
has been closed. Programming on an open device would result in a
non-secure configuration or a non-bootable device after the
close operation.

Create functions to detect the current TrustFence status and exit
the install script if the device is open and the artifacts are
encrypted.

Signed-off-by: Hector Palacios <hector.palacios@digi.com>

https://onedigi.atlassian.net/browse/DEL-9699
2025-07-02 21:17:24 +02:00
Hector Palacios 01107a1d87 uuu installer: remove -t option and determine by filename
The `-t` option to program images with TrustFence didn't make
much sense because the install script is dynamically generated
at build-time with the name of the boot artifacts containing
"signed/encrypted" on their filenames.

This commit:
 - Removes `-t` option to simplify the script.
 - Determines if programming a signed/encrypted bootloader by
   looking at the bootloader filename.
 - For NXP platforms, reworks the function that updates the
   bootloader to properly program only-signed bootloaders (currently
   wrongly using `trustfence update`)

Signed-off-by: Hector Palacios <hector.palacios@digi.com>
2025-07-02 21:17:24 +02:00
Isaac Hermida 1038192b11 linux-dey: tsn: fix tsn kernel support
fix missing option to include the required kernel options for tsn support.
That support was added in commit 37f5db42ac for kernel 6.1, but it
was missed for kernel 6.6.
Add the support to include the required fragment, regardless the kernel
version.
While on it, update the tsn config to match kernel 6.6.

Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2025-07-02 18:58:10 +02:00
Arturo Buzarra b460485771 Merge branch 'dey-5.0/master' into dey-5.0/maint
Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
2025-07-02 12:53:57 +02:00
Javier Viguera 35148654c7 u-boot: drop '-dtb' from signed/encrypted image filenames
Signed-off-by: Javier Viguera <javier.viguera@digi.com>
2025-07-01 18:21:13 +02:00
Francisco Gil d3e6f8648b cc6ul: vsftpd-cert: increase init priority to ensure certificates generation
The vsftpd-cert init script was previously starting too late,
causing vsftpd to start before the certificates were generated.
The priority has been increased (to 70) so that vsftpd-cert
runs earlier during boot.

Signed-off-by: Francisco Gil <francisco.gilmartinez@digi.com>
2025-07-01 13:27:36 +02:00
Hector Palacios 5d11be4d2b optee-client: change secure storage and TEE log paths
The default secure storage (/var/lib/tee) is a tmpfs and not persistent
across reboots. Change it to the data partition (/mnt/data/tee) when
TrustFence file system encryption enabled

For the log file, do use the /var/log/ directory instead of default
/data

Signed-off-by: Hector Palacios <hector.palacios@digi.com>

https://onedigi.atlassian.net/browse/DEL-9683
2025-06-27 08:32:18 +02:00
Javier Viguera 053adc70c0 meta-digi-dey: remove curl bbappend overriding resolver backend
Removed curl_%.bbappend which forced the use of ares over the default
threaded-resolver. We did this customization for NetworkManager long
ago in the context of network failover. Later we dropped it from NM,
but the customization in curl remained.

This saves approx. 100KB in the rootfs (libcares.so).

Signed-off-by: Javier Viguera <javier.viguera@digi.com>
2025-06-26 15:35:46 +02:00
Javier Viguera 5054410dfa packagegroup-core-x11-sato: reduce footprint for ccimx6ul-based images
* Disable GTK-based gstreamer player and connman network manager
* Remove matchbox-terminal to avoid pulling ICU
* Avoid pulseaudio client configuration to prevent duplicate instances

Also, delete the autospawn-for-root package config removal in our bbappend,
as that is not enabled by default in the recipe.

https://onedigi.atlassian.net/browse/DEL-9685

Signed-off-by: Javier Viguera <javier.viguera@digi.com>
2025-06-26 15:35:46 +02:00
Arturo Buzarra 9f6e78f036 ccmp25-dvk: integrate Sony IMX335 MIPI camera in default device tree
As the OmniVision OV5640 camera is now deprecated and no longer supported by
most vendors, this commit moves its support to a separate Device Tree overlay,
allowing it to be used if needed.

Instead, the Sony IMX335 MIPI camera is integrated into the default device
tree as the default supported camera for the CCMP25-DVK platform.

Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
2025-06-26 09:13:42 +02:00
Javier Viguera 6b40ed52d2 meta-digi-dey: backport ALSA and PulseAudio fixes from meta-imx
* Y2038: compile pulseaudio and alsa-lib with 64bit time flags
* Add patch to fix playback stuck issues on suspend/resume

https://onedigi.atlassian.net/browse/DEL-9681

Signed-off-by: Javier Viguera <javier.viguera@digi.com>
2025-06-24 12:07:18 +02:00
Javier Viguera 01ead103b1 meta-digi-dey: remove DEY specific y2038 issue fix
As of Yocto 5.0, Poky includes an equivalent solution for the Y2038 issue,
so drop the redundant code in meta-digi.

https://onedigi.atlassian.net/browse/DEL-9681

Signed-off-by: Javier Viguera <javier.viguera@digi.com>
2025-06-23 17:26:45 +02:00
Javier Viguera 2cbfe2ae0d tf-a-stm32mp: move TF-A symlink creation to do_deploy
Moved deploy_symlinks_atf from SYSROOT_PREPROCESS_FUNCS to do_deploy task
to ensure symlinks are created correctly even when rebuilding from the
shared state after a "bitbake -c clean tf-a-stm32mp".

Override do_deploy[sstate-outputdirs] from the original recipe to allow
installing both the deploy artifacts (binaries and symlinks) to the
package deploy directory.

Signed-off-by: Javier Viguera <javier.viguera@digi.com>
2025-06-23 17:05:31 +02:00
Hector Palacios f65dc4440e ccmp1: reorder addresses for fitImage binaries
Move the address where the fitImage is loaded after the addresses
where the binaries in it are decompressed. This way, the fitImage
can grow without size restrictions.

The memory map now looks like this:

  0xC0000000    Start of memory
      |
      |           (32 MiB)
      v
  0xC2000000    Kernel loadaddr ($loadaddr)
      |
      |           (32 MiB)
      v
  0xC4000000    DTB/DTBO load address ($fdt_addr)
      |           (4 MiB)
      v
  0xC4400000    Init ram disk ($initrd_addr)
      |
      |
      |           (64 MiB)
      |
      v
  0xC8400000    ZIP/fitImage address ($fit_addr_r)
      |
      ~
      |
      v

Signed-off-by: Hector Palacios <hector.palacios@digi.com>
2025-06-23 16:19:28 +02:00
Isaac Hermida e9af98f586 libpam: ccmp13: disable pam_systemd integration to improve login performance
On the CCMP13 platform, the inclusion of pam_systemd in the PAM stack
causes excessive delays during login -close to 10 seconds- and can
even lead to SSH login failures.
Since we do not require per-user systemd services (--user), disable
the pam_systemd session module to improve login responsiveness.

Signed-off-by: Isaac Hermida <isaac.hermida@digi.com>
2025-06-23 15:14:33 +02:00
Hector Palacios 66c39a590d wic: ccmp1: update TF-A and FIP artifact names to DEY-5.0
- The TF-A binaries now have ${BOOTSCHEME_DEFAULT} in them (optee or
  opteemin)
- The FIP binaries now have ${BOOTSCHEME_DEFAULT}-sdcard in them

Signed-off-by: Hector Palacios <hector.palacios@digi.com>

https://onedigi.atlassian.net/browse/DEL-9678
2025-06-20 20:45:14 +02:00
Gonzalo Ruiz f3c9b3c57a weston-init: wait for a wayland socket before logging in
The login prompt appears before Wayland is fully initialized and
has created a wayland socket.

Logging in too early as root in this scenario caused the
WAYLAND_DISPLAY environment variable to be left empty. As a
consequence, gstreamer failed to use waylandsink to print contents
in the display.

Introduce a 10-seconds polling loop to wait for the wayland socket to
be available before proceeding with the login.

Signed-off-by: Gonzalo Ruiz <Gonzalo.Ruiz@digi.com>
2025-06-20 10:19:17 +02:00
Arturo Buzarra 5947b0cc9c vsftpd: add support for SSL/TLS encrypted FTP sessions
This commit enables SSL/TLS support in vsftpd, allowing FTP communications to
be encrypted for improved security.

SSL/TLS support is enabled by default, but to preserve compatibility with
clients that do not support encrypted connections, this feature can be disabled
at runtime. Users can simply comment or uncomment a few lines in the
`vsftpd.conf` configuration file to toggle the behavior.

Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
2025-06-18 12:00:38 +02:00
Hector Palacios bd71ef76e5 build scripts: limit sdcard image to platforms that support it
The CC6UL SOM doesn't support booting from the SD card.
The STM based SOMs use a wic template to generate the SD card
image.

Signed-off-by: Hector Palacios <hector.palacios@digi.com>
2025-06-17 16:58:18 +02:00
Javier Viguera 78a1e7864f meta-digi-arm: remove old WolfSSL FIPS support
* Delete custom wolfssl_5.4.0-fips.bb recipe and README.
* Removed WolfSSL dynamic layer registration.

FIPS support is now managed through the external meta-wolfssl layer,
making this implementation unnecessary in meta-digi.

https://onedigi.atlassian.net/browse/DEL-9631

Signed-off-by: Javier Viguera <javier.viguera@digi.com>
2025-06-17 14:05:08 +02:00
Javier Viguera 93c6deb2d8 wolfcryptest: remove bbappend and FIPS patch
The new version in meta-wolfssl does build properly, so this append is
no longer needed.

https://onedigi.atlassian.net/browse/DEL-9631

Signed-off-by: Javier Viguera <javier.viguera@digi.com>
2025-06-17 14:05:08 +02:00
Javier Viguera fcd03fb421 linux-dey: fix duplicate kernel localversion
Yocto added kernel local version support by using the KERNEL_LOCALVERSION
variable. It conflicts with the "fsl-kernel-localversion" class from
the meta-freescale layer, resulting in a duplicated local version in the
kernel release label (uname -r). Use the current Yocto support to avoid
that duplication instead of meta-freescale's class.

This enables further simplification of the 'copy_defconfig' task for NXP
and STM platforms using common code.

https://onedigi.atlassian.net/browse/DEL-9669

Signed-off-by: Javier Viguera <javier.viguera@digi.com>
2025-06-16 17:41:26 +02:00
Hector Palacios 0aed6a9c73 move IMAGE_FSTYPES to digi-defaults.inc
IMAGE_FSTYPES was declared on each platform config file, but it has the
same values for all platforms depending on the storage media (mmc or mtd)
and whether read-only is enabled.

Move the conditional weak assignment to digi-default.inc and remove it from
each platform config.
In the case of STM platforms, since IMAGE_FSTYPES is weak-assigned by STM
layer, we still need to append/remove from it inside the platform config,
but move it to the family includes, rather than declaring it on each
specific platform.

Signed-off-by: Hector Palacios <hector.palacios@digi.com>
2025-06-16 08:35:19 +02:00
Hector Palacios 57f0575ad0 machine: remove 'sdcard.gz' image from default IMAGE_FSTYPES
The generation of the sdcard image takes time and resources, and
it's not involved in the Get Started.
This can be easily re-enabled by appending the variable in the
project local.conf.

Append the variable in the build scripts, to facilitate its usage
on release builds.

Signed-off-by: Hector Palacios <hector.palacios@digi.com>
2025-06-16 08:35:19 +02:00
Hector Palacios fc641ce680 dey-image: enable DEY_IMAGE_INSTALLER by default
This generates an installer.zip image with all the firmware
images, including install scripts for UUU, SD card, and USB.
This is helpful to share the artifacts with manufacturing
or for deploying to external media such as microSD or USB stick.

Signed-off-by: Hector Palacios <hector.palacios@digi.com>
2025-06-16 08:35:19 +02:00
Arturo Buzarra a20aadbeec bluez5-init: add Bluetooth init script for CCMP1x platforms
The HCI_UART Bluetooth driver does not support suspend-to-RAM operation, so the
driver must be loaded and unloaded manually. This commit adds support for the
Bluetooth initialization script used across Digi platforms, specifically for
ConnectCore MP13 and MP15.

https://onedigi.atlassian.net/browse/DEL-9650

Signed-off-by: Arturo Buzarra <arturo.buzarra@digi.com>
2025-06-13 13:24:28 +02:00
Hector Palacios ac69566ecd installer: merge USB/SD installers into a single template
The USB and SD installers are U-Boot scripts that are practically
identical.
Merge them into a single template with a couple of machine variables that
determine the default device index in U-Boot for the USB or the microSD
card.

Do dynamic substitutions to create the two installers out of the template.

Signed-off-by: Hector Palacios <hector.palacios@digi.com>
2025-06-12 10:56:57 +02:00
Hector Palacios 5156fe26b3 installers: use if/elif/else to determine rootfs filename
The installer uses the regular rootfs filename or falls back to search
for a squashfs (read-only) rootfs image.
The UUU installers of eMMC-based platforms use an if/elif/else structure
to determine which file exist (in order of preference). Replicate this
structure on the rest of platforms and installers.
This avoids printing an error message if the default rootfs does not exist
but the read-only one does.
Also, reset 'rootfstype' variable if the default rootfs file exists, which
allows to install regular images over a previous read-only system.

Signed-off-by: Hector Palacios <hector.palacios@digi.com>
2025-06-12 10:56:57 +02:00
Hector Palacios 5271924af7 Revert "tf-a-stm32mp: remove STM32MP_USB_PROGRAMMER support from NAND images"
We reverted the stub that didn't allow PM when serial boot
was enabled  on TF-A. Restore the part of the recipe that
includes USB boot support on NAND boot images.

This reverts commit 24aef482ef.

Signed-off-by: Hector Palacios <hector.palacios@digi.com>

https://onedigi.atlassian.net/browse/DEL-9629
2025-06-10 16:17:45 +02:00