Commit graph

2414 commits

Author SHA1 Message Date
Greg Leach
2aff40b1b1 tests: Add BL54L15/L15u DVK support
Adds support for the BL54L15 and BL54L15u DVK boards.

Signed-off-by: Greg Leach <greg.leach@ezurio.com>
2025-04-23 15:02:20 +02:00
Lyle Zhu
c5429d3204 tests: Bluetooth: Classic: Add dedicated test case for no_blobs
Add dedicated test case `bluetooth.classic.sdp.server.no_blobs` and
`bluetooth.classic.sdp.client.no_blobs` with the extra argument
`CONFIG_BUILD_ONLY_NO_BLOBS=y` and `build_only: true` to make sure the
tests sdp_s and sdp_c can be passed by Zephyr CI.

Fixes #88060.

Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
2025-04-22 09:58:47 +02:00
Emil Gydesen
4cffba7c08 tests: Bluetooth: tester: BAP: Fix wrong wrong bcast rsp sizes
Several responses had incorrect sizes, which this commit fixes.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2025-04-19 11:48:16 +02:00
Aleksander Wasaznik
a71cadfc68 Bluetooth: testlib: Fix includes (IWYU)
This commit fixes all includes in testlib according to IWYU rules and
sorts all includes in ascending order by name.

Signed-off-by: Aleksander Wasaznik <aleksander.wasaznik@nordicsemi.no>
2025-04-18 10:40:31 +02:00
Olivier Lesage
7b61bd6518 bluetooth: gatt: Add BT_GATT_CCC_WITH_WRITE_CB()
Add simple helper macro so users can define a CCCD with a write cb
without having to combine BT_GATT_CCC_MANAGED() and
BT_GATT_CCC_INITIALIZER() themselves.

Unlike the changed callback the write callback has a return value
that can be used to reject the write request.

Signed-off-by: Olivier Lesage <olivier.lesage@nordicsemi.no>
2025-04-11 16:17:42 +02:00
Troels Nilsson
c3df8fcd92 Bluetooth: Controller: Add validation of received LL_CIS_REQ
Validate that a received LL_CIS_REQ is valid and reject if it is not

Fixes EBQ test failure in LL/CIS/PER/BI-07-C

Signed-off-by: Troels Nilsson <trnn@demant.com>
2025-04-10 15:51:54 +02:00
Emil Gydesen
0270704bcb tests: Bluetooth: Tester: Fix bad check for valid RX
The check was incorrect, and only reported invalid ISO
packages instead of valid.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2025-04-09 15:23:39 +02:00
Emil Gydesen
a4f8744ccf Bluetooth: CCP: Client: Add get_bearers
Add bt_ccp_client_get_bearers that will return the bearers of
a client so that the application can always retrieve them if they
do not store them from the discovery callback.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2025-04-09 15:23:07 +02:00
alperen sener
08459ec165 tests: bluetooth: tester: Fix MESH/SR/PRB/PNID/BV-02-C test case
Private node identity advertisements must stop immediately when
ordered by PTS. To do so; adding enabled parameter to
btp_priv_node_id_get_cmd.

Signed-off-by: alperen sener <alperen.sener@nordicsemi.no>
2025-04-09 11:43:29 +02:00
Szymon Janc
ddedff7155 tests: bluetooth: tester: Add helper for supported commands response
This makes sure that supported commands are reported correctly.

Signed-off-by: Szymon Janc <szymon.janc@codecoup.pl>
2025-04-08 17:37:33 +02:00
Emil Gydesen
d8e771ded9 tests: Bluetooth: Add BT Tester GAP smoke test
Add a babblesim test of the BT Tester doing a GAP smoke test
connecting 2 BT testers using BTP.

The purpose of this is to further increase the test coverage
of the BT Tester in CI, as it is only being built, and runtime
errors are typically not caught.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2025-04-08 10:49:00 +02:00
Lyle Zhu
00ffb5ba97 Tests: Bluetooth: Classic: Bumble power_on() will fail on Linux
On Linux, the function `power_on()` of Bumble will fail when executing
even-numbered test cases.

From the `btmon` log, the controller will not reply the `HCI Command:
Reset` when the issue occurs.

Add a try-except to catch the exception of the function `power_on()`,
and retry to call the function `power_on()` until issue no longer
occurs. Or, the test will fail due to the timeout.

Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
2025-04-04 14:56:48 +02:00
Matthias Hauser
941a5489d3 dts: boards: we: add board Ophelia-IV
add new board Ophelia-IV

Signed-off-by: Matthias Hauser <matthias.hauser@we-online.de>
2025-04-03 13:16:05 +02:00
Lyle Zhu
eba356d56b Bluetooth: shell: Support HFP HF and AG
Support HFP HF and AG in shell.

Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
2025-04-03 06:24:32 +02:00
Johan Hedberg
39c2605930 Bluetooth: Fix deadlock with settings and bt_hci_cmd_send_sync()
We can't do synchronous HCI command sending in any settings commit()
callback, since we don't know what context the callback is being called
from. One particular deadlock can happen if settings_load() is called from
the preemptible main thread:

main()
 |--> settings_load() (aquire settings_lock mutex)
       |-->commit callback A that defers to system wq
       |-->commit callback B that calls bt_hci_cmd_send_sync()

system wq from the previous deferral from within settings_load():
 |--> work item
       |--> settings_save_one()
             |--> attempt to aquire settings_lock mutex

In the above scenario, the bt_hci_cmd_send_sync() call from the main thread
depends on the system workqueue being processed (since that's what does HCI
command processing by default), while at the same time holding the settings
subsystem's mutex. At the same time, a system wq item tries to store
something into settings, however it deadlocks waiting for the settings
mutex.

The actual scenario that we have in the Bluetooth subsystem is where
"commit callback A" is commit_settings() in host/settings.c, and "commit
callback B" is keys_commit() in host/keys.c.

The solution to the deadlock is to take advantage of deferred bt_id_add()
handling which already exists, i.e. set a flag and deferre the actual
adding to the system workqueue.

Signed-off-by: Johan Hedberg <johan.hedberg@silabs.com>
2025-04-01 16:28:00 +02:00
Ryan Chu
c9240cc99f bluetooth: host: Report status of Channel Sounding complete events
If the HCI status of a complete event is not BT_HCI_ERR_SUCCESS,
the remaining parameters could be invalid.

In this case, the params is passed as NULL pointer to the callbacks.
- LE CS Read Remote Supported Capabilities Complete event
- LE CS Read Remote FAE Table Complete event
- LE CS Config Complete event
- LE CS Security Enable Complete event
- LE CS Procedure Enable Complete event

This change avoids forwarding the invalid fileds to the applications.

Signed-off-by: Ryan Chu <ryan.chu@nordicsemi.no>
2025-04-01 16:26:58 +02:00
Emil Gydesen
26e74f75b6 tests: Bluetooth: Tester: Fix typo in PBP announcement
Fixes typo in the event name.
Changes the struct to also use _ev instead of _rp as it
is an event and not a response.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2025-03-31 19:48:25 -04:00
Vinayak Kariappa Chettimada
4ab805b389 Bluetooth: Controller: Fix incorrect CIS offset accepting peer instant
Fix incorrect CIS offset in use if instant is picked from
the peer sent CIS RSP PDU. Instead, keep the instant that
was sent in the CIS REQ PDU as the instant to send in the
CIS IND PDU.

This fixes CIS failed to be established when dissimilar
ACL and ISO intervals are in use.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2025-03-29 06:32:21 +01:00
Evgenii Kosenko
c8e28d15b8 bluetooth: tester: btp_gap: adds set rpa timeout cmd
Adds BTP_GAP_SET_RPA_TIMEOUT command to btp, it allows dynamically set
Resolvable Private Address timeout.

Signed-off-by: Evgenii Kosenko <Evgenii.Kosenko@silabs.com>
2025-03-24 15:09:53 +01:00
Lyle Zhu
9b8297545a tests: Bluetooth: BR: Add test suite sdp_server
IUT works as a SDP Server. The peer device, SDP client, is a PC with
running `bumble` on it.

Define 10 SDP records. 8 normal SDP records. one SDP record with large
service name that cannot be discovered by peer since the data length
exceeds the MTU of SDP. And one SDP record with large service name
that can be discovered by peer but `continuation state` needs to be
involved.

By default, no SDP record will be registered.
Add shell command `register_sdp` to register specific SDP record.
Add shell command `register_sdp_all` to register all normal SDP
records.
Add shell command `register_sdp_large` to register SDP record with
large service name that cannot be discovered by peer.
Add shell command `register_sdp_large_valid` to register SDP record
with large service name that can be discovered by peer.

In the test suite, there two test cases,
Case 1, discover the IUT.
Case 2, connect to the IUT. And send serial SDP discovery requests.

Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
2025-03-24 15:09:26 +01:00
Emil Gydesen
1a2ea57885 Bluetooth: Classic: Shell: Remove last use of ctx_shell
The Bluetooth Classic sdp_client was the last user
of the ctx_shell, which could easily be removed.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2025-03-24 12:14:42 +01:00
Emil Gydesen
69b6679613 Bluetooth: tester: Fix name of btp_ascs_ase_found_ev
The event is a BAP event, and has been renamed to
btp_bap_ase_found_ev.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2025-03-23 13:19:51 +01:00
Lyle Zhu
30c1ba17e3 test: Bluetooth: Classic: Rename SDP client test case
Change the test case name from `sdp.c` to ` bluetooth.classic.sdp.client`

Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
2025-03-21 06:31:40 +01:00
Emil Gydesen
d19abff476 Bluetooth: CSIP: Add support for dynamically setting set size
The set size can now be dynamically set and notified.
The rank is added as a argument in the case that changing
the set size, also affects the device's rank, as ranks
in a coordinated set needs to be continuous.

The set coordinator implementation has been updated
to support receiving the new set size, and providing
this information to the upper layers.

This commit adds a babblesim test for the new API,
as well as a shell command.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2025-03-20 14:23:40 +01:00
Emil Gydesen
f783e54160 tests: Bluetooth: Tester: Add mutex for uart_send
Since tester_send_with_index may be called in different threads,
we need to guard the 2 calls to uart_send to avoid
sending partial btp message from 2 or more threads.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2025-03-20 14:23:02 +01:00
Lyle Zhu
0e792d4271 Bluetooth: BR: Shell: L2CAP mode support
Add more parameters to command `connect` and `register`, including mode,
mode_optional, extended_control, and hold_credit.

Add command `credits` to give the rx credit.

Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
2025-03-19 08:52:07 -04:00
Emil Gydesen
065dca7e92 Bluetooth: ISO: Make setting ISO data explicit
The stack will no longer implicitly set the data path
for ISO channel, and the responsibility for doing that is
now for the upper layers/applications.

This provides additional flexibility for the higher layers
as they can better control the values and timing of the data
path, as well as support removing and even reconfiguring the
data path at will.
This also removes some complexity from the stack.

This commit also fixed a inconsistency in the disconnected
handler. CIS for centrals as well as BIS were still valid
bt_iso_chan channels in the disconnected callback,
but CIS for peripherals were completely cleaned up at this
point. This issue is fixed by moving the disconnected callback
handling to before the code to cleanup the channel for
peripherals.

Since there is a difference in how you remove data paths
depending on the GAP role (central/peripheral), the
iso_info struct type has been expanded to be more
concise of which type of CIS it is.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2025-03-19 10:56:57 +01:00
Lyle Zhu
144d329130 test: Bluetooth: BR: Add label platform_allow
Add label `platform_allow` to limit the allowed platforms.

Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
2025-03-18 16:45:09 +01:00
Alexander Svensen
33b4faed9c test: bluetooth: tester: Fix regression in PBP
- Allocate source in PBP first time adv is created
- Only set_adv_data in adv_setup if ext_adv already exists
- Fixes regression in PTS for PBP tests

Signed-off-by: Alexander Svensen <alexander.svensen@nordicsemi.no>
2025-03-17 13:57:41 +01:00
Lyle Zhu
ec1b384917 tests: Bluetooth: BR: Add test suite sdp_client
IUT works as a SDP Client. The peer device, SDP server, is a PC with
running `bumble` on it.

Add shell command `discovery` to discover specific SDP record
according to specific UUID.

In the test suite, there are three groups test cases,
Group 1 is for Service Search Attribute transaction.
Group 2 is for Service Search transaction.
Group 3 is for Service Attribute transaction.

For each test group, there are four test cases,
Case 1, No SDP record is registered on PC. IUT should not find any SDP
record.
Case 2, A2DP source SDP record is registered on PC. IUT can find SDP
record. And the discovered PSM and version should be same with
registered.
Case 3, A2DP source and HFP HF SDP Records are registered. IUT can
find SDP record. And the discovered RFCOMM channel and HFP version
should be same with registered. This case is used to test the
"continuation state information".
Case 4, Multiple SDP Records are registered. This case is used to test
 the "continuation state information". And also it used to test the
total length exceeds the ACL RX Buffer Size.

Signed-off-by: Lyle Zhu <lyle.zhu@nxp.com>
2025-03-14 05:46:12 +01:00
Emil Gydesen
bd254eea25 tests: Bluetooth: Tester: Fix bad memset in btb_bap_broadcast
btp_bap_broadcast_local_source_free used &source, but since
source was already a pointer, it should just use source.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2025-03-14 01:02:22 +01:00
Emil Gydesen
b2310b69bb tests: Bluetooth: Tester: Do not send MICP Mute ev on write cb
When the BT Tester gets the write response, it should not send
the state change event, as the write response may come
before the notifications, and in which case the state may
not have changed.

The BT Tester should always wait for the state change notification
before sending the event.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2025-03-13 10:49:35 +01:00
Emil Gydesen
5918427278 Bluetooth: Host: Make bt_le_addr_is_bonded public
Some GATT services and profiles define specific behavior
based on whether the remote device is bonded or not.
The internal function, bt_addr_le_is_bonded, is the
only function to do this, but it was kept internal,
and could thus not be used for those services
without including hci_core.h.

The function has been moved to the public API
so that application can determine if a remote
address is bonded or not, and has been renamed
to not use the bt_addr namespace, but rather the
bt_le.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2025-03-13 10:48:19 +01:00
Emil Gydesen
1f26899229 Bluetooth: TBS: Ensure sending notifications
The existing implemented only attempted to send all notifications,
but if host was out of ATT TX buffers the notifications would fail
and the client may miss out on important information, and would be
a spec violation.

This commit refactors notificatios in TBS so that they are always
sent.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2025-03-13 10:27:59 +01:00
Alberto Escolar Piedras
cb53e40ff9 drivers uart_native_posix: rename to native_pty and support N instances
Rename the driver from uart_native_posix to uart_native_pty.
Including renaming the DTS compatible, and kconfig options, deprecating
the old ones.

And refactor the driver, generalizing it, so we can have any number of
instances.
Note that, unfortunately generalizing to N instances cannot be done
without a degree of backwards compatibility breakage: This driver was
born with all its configuration and selection of the instances based on
kconfig.
When the driver was made to use DT, it was done in a way that required
both DT and kconfig needing to manually coherently enable the 2nd UART.
This has now been fixed, which it means only DT is used to decide how
many instances are avaliable, and UART_NATIVE_POSIX_PORT_1_ENABLE is
just ignored.

Including:
* Deprecate UART_NATIVE_WAIT_PTS_READY_ENABLE: the options is always on
  now as it has no practical drawbacks.
* Deprecate UART_NATIVE_POSIX_PORT_1_ENABLE: DTS intanciation defines it
  being available now.
* Rename a few functions and in general shorten pseudo-tty/pseudo-
  terminal to PTY instead of PTTY.

Signed-off-by: Alberto Escolar Piedras <alberto.escolar.piedras@nordicsemi.no>
2025-03-11 18:54:02 +01:00
Emil Gydesen
9d4cc4b49b Bluetooth: BAP: Add a set of suggested intervals to use with BAP
Add a selection of interval values that are suitable for BAP,
which will allow better coexistence between ISO and ACL,
for both broadcast and unicast. Some of these are defined
by the BAP spec, and some are defined by Zephyr, since they
do have a suggested value from BAP.

Samples and tests have been updated to use these new values.
Peripheral samples have also been updated with
CONFIG_BT_GAP_AUTO_UPDATE_CONN_PARAMS so that the connection
parameters from the centrals aren't updated to something else
shortly after.

The shell has also been updated to use the LE Audio (BAP) values
if audio is enabled, and the audio.conf file has disabled automatic
updating of the connection parameters as the peripheral, as we rarely
(if ever) want to do that.

Due to the connection interval change, CI hit an issue
with test_bass_broadcast_code in test_main_client_sync, where
the reading of the long receive state did not finish before we
attempted to do another procedure, so the function was updated to have
a retry.

Signed-off-by: Emil Gydesen <emil.gydesen@nordicsemi.no>
2025-03-11 08:58:51 +01:00
Graham Wacey
fb620ef59c tests: bluetooth: tester: Implement BAP/BSRC/SCC/BV-38-C
- Make ext_adv and per_adv into arrays for multiple BIGs
 - Create bap_broadcast-source_setup_v2 command
  - Handles broadcast_id as an input

Signed-off-by: Graham Wacey <graham.wacey@nordicsemi.no>
Signed-off-by: Alexander Svensen <alexander.svensen@nordicsemi.no>
2025-03-10 11:09:57 +01:00
Alexander Svensen
6d19fc2b86 tests: bluetooth: tester: Make brcst_source_stop synchronous
- Add semaphore to make sure source is stopped before proceeding
- This ensures source can be released after this command is finished

Signed-off-by: Alexander Svensen <alexander.svensen@nordicsemi.no>
2025-03-07 19:53:44 +01:00
Alberto Escolar Piedras
6c38bc8ec4 boards native_posix: Remove twister support
native_posix is being removed as it has reached its end of life in 4.2,
after being deprecated since 4.0.

Remove the twister support for native_posix[//64] and therefore all
references to them from the testcases and samples yamls, so twister
does not error out.

Signed-off-by: Alberto Escolar Piedras <alberto.escolar.piedras@nordicsemi.no>
2025-03-07 19:16:14 +01:00
Szymon Janc
23cfe6b42b tests: Bluetooth: Mark generated qualification file as binaries
Those are generated files and shall not be modified to match codestyle
requirements.

Signed-off-by: Szymon Janc <szymon.janc@codecoup.pl>
2025-03-05 19:05:09 +00:00
Szymon Janc
cd5dab69cb test: bluetooth: Update ICS to TCRL 2025-1
This also bumps some LE Audio spec to latest point releases.

Signed-off-by: Szymon Janc <szymon.janc@codecoup.pl>
2025-03-05 19:05:09 +00:00
Théo Battrel
75885e81de Tests: Bluetooth: Fix stack overflow for tester
Increase value of `CONFIG_BTTESTER_BTP_CMD_THREAD_STACK_SIZE` for
nrf54L15 board to avoid stack overflow.

Remove the config in the Mesh overlay as it's was also added for nrf54L15.

Signed-off-by: Théo Battrel <theo.battrel@nordicsemi.no>
2025-02-28 18:30:08 +01:00
Szymon Janc
c20bd87d3d tests: bluetooth: tester: Fix invalid checks in oob_data_request
CONFIG_BT_SMP_OOB_LEGACY_PAIR_ONLY disables all but legacy OOB
pairing (including LE SC) and is not intended for enabling/disabling
support for legacy OOB pairing. bt_le_oob_set_legacy_tk() depends on
CONFIG_BT_SMP_SC_PAIR_ONLY so just use same check here.

For BT_CONN_OOB_LE_SC only supported way to disable LE SC OOB is
to force BT_SMP_OOB_LEGACY_PAIR_ONLY which disables all pairing
except legacy OOB support.

Signed-off-by: Szymon Janc <szymon.janc@codecoup.pl>
2025-02-26 15:05:33 +01:00
Vinayak Kariappa Chettimada
d382fca6ff Bluetooth: Controller: Fix HCI command buffer allocation failure
Fix HCI command buffer allocation failure, that can cause
loss of Host Number of Completed Packets command.

Fail by rejecting the HCI Host Buffer Size command if the
required number of HCI command buffers are not allocated in
the Controller implementation.

When Controller to Host data flow control is supported in
the Controller only build, ensure that BT_BUF_CMD_TX_COUNT
is greater than or equal to (BT_BUF_RX_COUNT + Ncmd),
where Ncmd is supported maximum Num_HCI_Command_Packets in
the Controller implementation.

Relates to commit 81614307e9 ("Bluetooth: Add workaround
for no command buffer available")'.

Relates to commit 297f4f481f ("Bluetooth: Split HCI
command & event buffers to two pools").

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2025-02-21 11:30:38 +00:00
Benjamin Cabé
84d4c8aec5 bluetooth: controller: fix spelling of "exactly"
s/excactly/exactly/

Signed-off-by: Benjamin Cabé <benjamin@zephyrproject.org>
2025-02-19 18:51:13 +01:00
Evgenii Kosenko
4a16d62e56 bluetooth: tester: btp: adds testcase tester legacy adv
Adds testcase to build tester with forced legacy advertisements,
CONFIG_BT_EXT_ADV=n.

Signed-off-by: Evgenii Kosenko <Evgenii.Kosenko@silabs.com>
2025-02-18 18:37:59 +01:00
Evgenii Kosenko
d8f8dd4c14 bluetooth: tester: btp: refactors periodic adv selection
Takes in use IS_ENABLED as preferred way of guarding Kconfig option for
enabling periodic advertising api, CONFIG_BT_PER_ADV. It enables compiling
guarded code get warning/errors and not link it if not used.

Signed-off-by: Evgenii Kosenko <Evgenii.Kosenko@silabs.com>
2025-02-18 18:37:59 +01:00
Evgenii Kosenko
1633f98e26 bluetooth: tester: btp: refactors LE secure pairing selection
Takes in use IS_ENABLED as preferred way of guarding Kconfig option for
enabling legacy LE secure pairing, CONFIG_BT_SMP_SC_PAIR_ONLY. It enables
compiling guarded code get warning/errors and not link it if not used.

Signed-off-by: Evgenii Kosenko <Evgenii.Kosenko@silabs.com>
2025-02-18 18:37:59 +01:00
Evgenii Kosenko
0b2fbf9903 bluetooth: tester: btp: fixes ext adv selection
Disabling extended advertising, CONFIG_BT_EXT_ADV, fails to compile cause
references not guarded ext_adv variable when tester_gap_create_adv_instance
is called. Fixes by taking in use IS_ENABLED as preferred way of guarding
Kconfig option. It enables compiling guarded code to get warning/errors and
not to link if not used.

Signed-off-by: Evgenii Kosenko <Evgenii.Kosenko@silabs.com>
2025-02-18 18:37:59 +01:00
Evgenii Kosenko
bf7dfc5e8d bluetooth: tester: btp: refactors privacy selection
Takes in use IS_ENABLED as preferred way of guarding Kconfig option for
enabling privacy, CONFIG_BT_PRIVACY. It enables compiling guarded code get
warning/errors and not link it if not used.

Signed-off-by: Evgenii Kosenko <Evgenii.Kosenko@silabs.com>
2025-02-18 18:37:59 +01:00