Commit Graph

1034 Commits

Author SHA1 Message Date
Luiz Augusto von Dentz
c581163dcf Bluetooth: Fix not accepting string equal to CONFIG_BT_DEVICE_NAME_MAX
In order to accept string of the same size entered in
CONFIG_BT_DEVICE_NAME_MAX an extra byte must be allocated to guarantee
it will always be NULL terminated.

Fixes #15067

Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2019-04-01 17:51:41 +03:00
Patrik Flykt
21358baa72 all: Update unsigend 'U' suffix due to multiplication
As the multiplication rule is updated, new unsigned suffixes
are added in the code.

Signed-off-by: Patrik Flykt <patrik.flykt@intel.com>
2019-03-28 17:15:58 -05:00
Patrik Flykt
24d71431e9 all: Add 'U' suffix when using unsigned variables
Add a 'U' suffix to values when computing and comparing against
unsigned variables.

Signed-off-by: Patrik Flykt <patrik.flykt@intel.com>
2019-03-28 17:15:58 -05:00
Johan Hedberg
49a34244be Bluetooth: Mesh: Remove redundant LOCAL_PUB_KEY flag
There's no need to track this info in prov.c since hci_core.c is
already doing it. Just query hci_core.c always using the
bt_pub_key_get() API.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-03-28 15:39:59 +01:00
Johan Hedberg
c6fa295e6a Bluetooth: Mesh: Fix disconnecting existing provisioning bearers
If PB-GATT is disabled while there are connected clients, those
clients must be disconnected. Add a 'disconnect` parameter to
bt_mesh_proxy_prov_disable() to handle scenarios when we don't want to
disconnect (e.g. right after successfully finishing provisioning) and
tose where we do want to disconnect (e.g. user requesting to disable
the provisioning bearer).

Also make sure that we always update advertising, so that a stale
advertising set isn't left in the controller.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-03-28 15:39:59 +01:00
Johan Hedberg
7d3b627e19 Bluetooth: Mesh: Fix re-initializing provisioning state upon reset
If both PB-ADV and PB-GATT are supported, we need to properly
re-initialize variables such as link.rx.prev_id and (particularly
importantly) link.rx.buf. If we don't do this it may lead to the
following fault when trying to reprovision again:

***** USAGE FAULT *****
  Illegal use of the EPSR
***** Hardware exception *****
Current thread ID = 0x20001f10
Faulting instruction address = 0x0
Fatal fault in thread 0x20001f10! Aborting.

Fixes #14928

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-03-28 15:39:59 +01:00
Johan Hedberg
87fe134e65 Bluetooth: Mesh: Fix gen_prov struct definition
Remove unnecessary const keywords (the entire struct is const) and use
bool instead of u8_t for the require_link member.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-03-28 15:39:59 +01:00
Johan Hedberg
b40235b3e0 Bluetooth: Mesh: Take advantage of settings_delete() when possible
Using settings_delete() makes it much easier to understand what the
code is doing, and actually also reduces the amount of code.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-03-28 15:23:46 +01:00
Johan Hedberg
35ebacbe06 Bluetooth: Clean up settings related code
Add error checking, remove redundant code, and improve the logging for
settings related functionality.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-03-28 15:23:46 +01:00
Johan Hedberg
f9450f072f Bluetooth: Remove unused ID_SIZE_MAX macro
There are no more user for this macro - just remove it.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-03-28 15:23:46 +01:00
Johan Hedberg
bcc2d8f0a9 Bluetooth: GATT: Fix attribute read return parameter type
The read() callback of attributes returns ssize_t and not size_t. Fix
this, which also fixes a Coverity warning.

Fixes Coverity CID 197457
Fixes #14958

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-03-28 15:22:22 +01:00
Johan Hedberg
12bf7e6ead Bluetooth: Use bt_addr_le_copy() instead of direct assignment
The convention in the code is to use the appropriate address copying
functions instead of direct assignments. Even when a specific copying
function doesn't exist the convention is to use memcpy.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-03-28 09:02:00 -05:00
Vinayak Kariappa Chettimada
3353c9f3c8 Bluetooth: Fix scan failed to start due to RPA timeout
Updating the Resolvable Private Address when advertising and
active scanning in progress fails and clears the RPA_VALID
flag; making the next bt_le_scan_start while continuing to
advertise to fail.

This is fixed by keeping the RPA_VALID flag remain set.
Stopping and starting active scanning to update RPA can be
implemented in a separate commit.

Fixes #9463.

Signed-off-by: Vinayak Kariappa Chettimada <vich@nordicsemi.no>
2019-03-28 14:37:58 +01:00
Erwan Gouriou
7d81a099e6 Bluetooth: Mesh: Increase advertising thread stack size
With BT_HOST_CRYPTO, advertising stack size could be overflowed,
increase size to 1024 when BT_HOST_CRYPTO is enabled.

Signed-off-by: Erwan Gouriou <erwan.gouriou@linaro.org>
2019-03-25 22:51:18 -04:00
Johan Hedberg
f811e5446a Bluetooth: Fix missing checks for the BT_DEV_READY flag
Several public APIs were not checking the BT_DEV_READY flag, which
could lead to hard-to-debug behavior, particularly when the stack
lacks an identity address. Add the appropriate checks to these APIs.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-03-25 10:04:45 +02:00
Johan Hedberg
12a413779d Bluetooth: Fix init procedure handling with BT_SETTINGS
The treatment of the BT_DEV_READY flag was broken when used together
with BT_SETTINGS. The flag would get set even though the stack was
still in a partially initialized state. Even worse, for central role
the stack would potentially try to initiate passive scanning without
having an identity address.

Refactor the code that sets the BT_DEV_READY flag (among other
initialization) into a separate bt_finalize_init() helper function and
call it when the settings have been loaded. Also clarify the warning
message given to the user in case settings_load() needs to be called.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-03-25 10:04:45 +02:00
Johan Hedberg
3ebd9b4a09 Bluetooth: Mesh: Fix clearing model binding and subscriptions
The code for clearing model bindings and subscriptions was flawed in
that proper "cleared" entries were never stored in settings. The code
must pass 0 and NULL to settings_save_one() in case the entry is
desired to be cleared.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-03-21 10:10:52 +02:00
Johan Hedberg
dac335c238 Bluetooth: Mesh: Fix clearing model subscription list
The code was storing a "cleared" entry in storage for every model,
regardless of them having any subscriptions or not. Update hte
mod_sub_list_clear() function to return a "cleared entries" count so
that the calling code can decide whether any action is needed or not.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-03-21 10:10:52 +02:00
Johan Hedberg
a0d762999d Bluetooth: Mesh: Clean up logging related to settings storage
Remove redundant "val (null)" logs and add a few missing BT_DBG()
calls to make the tracing of storage handling easier.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-03-21 10:10:52 +02:00
Johan Hedberg
4cac39e14a Bluetooth: Fix missing return statement in le_conn_param_req()
The le_conn_param_req() function was missing a return statement in
case of a failed connection lookup. This could lead to replying to the
connection parameter request twice as well as passing NULL to
bt_conn_unref(). The latter issue also triggered a Coverity warning.

Fixes CID 196638

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-03-21 10:05:47 +02:00
Mariusz Skamra
3ab275f3e1 Bluetooth: mesh: Fix net_id net_buf_pull in secure_beacon_recv
This fixes usage of net_buf_simple_pull_mem to pull the net_id
from network buffer.

Signed-off-by: Mariusz Skamra <mariusz.skamra@codecoup.pl>
2019-03-19 06:54:26 +02:00
Kumar Gala
fdc59d7c2b Bluetooth: Mesh: Fix clang uninitialized var warning
There's a BT_DBG that will output the value of pub_addr before its ever
set to anything.  Remove output of pub_addr from BT_DBG().

Signed-off-by: Kumar Gala <kumar.gala@linaro.org>
2019-03-14 14:31:57 -05:00
Luiz Augusto von Dentz
bcf3d8e16b Bluetooth: GATT: Add BT_GATT_DISCOVER_ATTRIBUTE type
This adds BT_GATT_DISCOVER_ATTRIBUTE which can be used to discover any
type of attribute in a given range.

Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2019-03-13 17:48:37 +02:00
Luiz Augusto von Dentz
af61102ae1 Bluetooth: GATT: Skip Characteristic Value when discovering Descriptors
Those are not considered Descriptors and shall be discovered with
use of BT_GATT_DISCOVER_CHARACTERISTIC.

Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2019-03-13 17:48:37 +02:00
Luiz Augusto von Dentz
76deb657d7 Bluetooth: GATT: Skip certain attributes when discovering descriptors
When discovering descriptor Find Information procedure is used which
does not allow any filtering by the server so it will return all
attributes in the given range including services and characteristics.

Fixes #14265

Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2019-03-13 17:48:37 +02:00
Johan Hedberg
0299db7303 Bluetooth: Mesh: Fix checking for bt_mesh_provision() error
There isn't much we can do if this fails, but at least log an error
about it.

Fixes #13855

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-03-13 05:35:58 -05:00
Thomas Stenersen
c1a18fb514 bluetooth: host: Specify controller in BT_HCI_TX_STACK_SIZE defaults
By specifying the controller directly when selecting the default
BT_HCI_TX_STACK_SIZE, an external controller may rely on the final
default value when none of the in-tree controllers are used.

The value is increased to 1024 to accomodate the current worst-case
stack size.

Signed-off-by: Thomas Stenersen <thomas.stenersen@nordicsemi.no>
2019-03-12 19:42:40 +01:00
Patrik Flykt
4344e27c26 all: Update reserved function names
Update reserved function names starting with one underscore, replacing
them as follows:
   '_k_' with 'z_'
   '_K_' with 'Z_'
   '_handler_' with 'z_handl_'
   '_Cstart' with 'z_cstart'
   '_Swap' with 'z_swap'

This renaming is done on both global and those static function names
in kernel/include and include/. Other static function names in kernel/
are renamed by removing the leading underscore. Other function names
not starting with any prefix listed above are renamed starting with
a 'z_' or 'Z_' prefix.

Function names starting with two or three leading underscores are not
automatcally renamed since these names will collide with the variants
with two or three leading underscores.

Various generator scripts have also been updated as well as perf,
linker and usb files. These are
   drivers/serial/uart_handlers.c
   include/linker/kobject-text.ld
   kernel/include/syscall_handler.h
   scripts/gen_kobject_list.py
   scripts/gen_syscall_header.py

Signed-off-by: Patrik Flykt <patrik.flykt@intel.com>
2019-03-11 13:48:42 -04:00
Ulf Magnusson
b34b2c5a94 Bluetooth: kconfig: Remove redundant dependencies
subsys/bluetooth/common/Kconfig and subsys/bluetooth/host/Kconfig are
'source'd within 'if BT' and 'if BT_HCI', in subsys/bluetooth/Kconfig,
so there's no need to add those dependencies within them.

'if FOO' is just shorthand for adding 'depends on FOO' to each item
within the 'if'. Dependencies on menus work similarly. There are no
"conditional includes" in Kconfig, so 'if FOO' has no special meaning
around a source. Conditional includes wouldn't be possible, because an
if condition could include (directly or indirectly) forward references
to symbols not defined yet.

Tip: When adding a symbol, check its dependencies in the menuconfig
('ninja menuconfig', then / to jump to the symbol). The menuconfig also
shows how the file with the symbol got included, so if you see
duplicated dependencies, it's easy to hunt down where they come from.

Signed-off-by: Ulf Magnusson <Ulf.Magnusson@nordicsemi.no>
2019-03-09 10:03:06 -05:00
Pawel Dunaj
4858a868e6 bluetooth: host: Expand TX thread stack for BT_CENTRAL
Expand TX stack size as more RAM is needed when keys are
stored.

Signed-off-by: Pawel Dunaj <pawel.dunaj@nordicsemi.no>
2019-03-05 11:22:39 +01:00
Nick Ward
b17d9eefc5 Bluetooth: GATT: Remove ccc cfg value
CCC cfg value was not being cleared on disconnection of a non bonded
peer if another peer was connected, had non zero value and occurred
earlier in the ccc cfg array.

Signed-off-by: Nick Ward <nick.ward@setec.com.au>
2019-03-01 12:50:43 +01:00
Filip Kubicz
5415f67475 bluetooth: settings: Clean up storing Bluetooth host values
Add missing log_strdup and remove usage of goto where not needed.

Signed-off-by: Filip Kubicz <filip.kubicz@nordicsemi.no>
2019-03-01 12:49:28 +01:00
Pawel Dunaj
aab77ea10f bluetooth: Fix broken directed advertising
This code probably got broken during some merge.

Signed-off-by: Pawel Dunaj <pawel.dunaj@nordicsemi.no>
2019-02-27 11:49:48 +02:00
Luiz Augusto von Dentz
46298da104 Bluetooth: Mesh: Use BT_GATT_CCC_MANAGED
This makes use of BT_GATT_CCC_MANAGED so instead of having a custom
attribute which is not managed by stack.

Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2019-02-27 10:30:50 +01:00
Luiz Augusto von Dentz
efb064ab9b Bluetooth; GATT: Consolidate code for finding a CCC config
This consolidates code for finding a CCC config in a helper function
thus reducing the amount of duplicated code.

Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2019-02-27 10:30:50 +01:00
Luiz Augusto von Dentz
da163794d0 Bluetooth: GATT: Add BT_GATT_CCC_MANAGED
This adds another helper macro called BT_GATT_CCC_MANAGED which can be
used to set 2 new callbacks:

 - cfg_write: Which application can set if it wants to manage writes to
 CCC configuration.
 - cfg_match: Which application can set if it wants to manage matching
 CCC configuration when notifying/indicating.

BT_GATT_CCC_MANAGED retains the ability of saving peer configuration
on storage making it useful for clients which are only interrested in
managing the CCC configuration but not the storage itself.

Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2019-02-27 10:30:50 +01:00
Ulf Magnusson
9aab5cef96 kconfig: Remove redundant 'default n' properties
Some more were added since the cleanup pass in June 2018. See e.g.
commit 2d50da70a1 ("drivers: ipm: Kconfig: Remove redundant 'default n'
properties") for a motivation. It also avoids people wondering whether
or not they need to put in 'default n'.

Signed-off-by: Ulf Magnusson <Ulf.Magnusson@nordicsemi.no>
2019-02-27 09:25:22 +01:00
Filip Kubicz
e44011b6e3 Bluetooth: host: Use log_strdup() for stack strings
Prevent temporary strings from being printed incorrectly if they go out
of scope before being processed by logger.

Signed-off-by: Filip Kubicz <filip.kubicz@nordicsemi.no>
2019-02-21 09:25:50 -05:00
Filip Kubicz
f1a2295088 Bluetooth: settings: Always initialize key when storing Client Features
Fixes #13572.

Initialize key used to store Client Features even when config was not
found.

Signed-off-by: Filip Kubicz <filip.kubicz@nordicsemi.no>
2019-02-21 09:25:50 -05:00
Johan Hedberg
16311e2285 Bluetooth: settings: Fix missing log_strdup() call
The bt_settings_encode_key() cannot know if the given path pointer is
on the stack or not, so the only safe way to pass it to the logger is
by using a log_strdup() call. Not doing this will likely cause
corrupted strings to show up in the log output.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-02-21 13:25:06 +02:00
Krzysztof Chruscinski
3605e48c44 shell: Modify subcommands to use SHELL_STATIC_SUBCMD_SET_CREATE
It is planned to deprecate SHELL_CREATE_STATIC_SUBCMD_SET macro
which is replaced by SHELL_STATIC_SUBCMD_SET_CREATE.

Additionally, removed irrelevant comments about alphabetical
ordering which is no longer needed.

Signed-off-by: Krzysztof Chruscinski <krzysztof.chruscinski@nordicsemi.no>
2019-02-20 07:31:35 -05:00
Kamil Piszczek
6bb75a53d1 Bluetooth: gatt: ccc changed cb after connection cb
Changed the order of Bluetooth callbacks. Now the connected callback is
received before CCC changed callbacks.

Signed-off-by: Kamil Piszczek <Kamil.Piszczek@nordicsemi.no>
2019-02-18 15:13:25 -05:00
Johan Hedberg
1cfa12276c Bluetooth: Mesh: Increase advertising thread size
In certain configurations, such as with MPU support enabled, the
consumption of the advertising thread has gone slightly up. In some
case it was seen to overflow by some 48 bytes. Let it always be 786,
like it was so far with CONFIG_BT_HOST_CRYPTO.

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2019-02-15 18:49:14 -05:00
Carlos Stuart
75f77db432 include: misc: util.h: Rename min/max to MIN/MAX
There are issues using lowercase min and max macros when compiling a C++
application with a third-party toolchain such as GNU ARM Embedded when
using some STL headers i.e. <chrono>.

This is because there are actual C++ functions called min and max
defined in some of the STL headers and these macros interfere with them.
By changing the macros to UPPERCASE, which is consistent with almost all
other pre-processor macros this naming conflict is avoided.

All files that use these macros have been updated.

Signed-off-by: Carlos Stuart <carlosstuart1970@gmail.com>
2019-02-14 22:16:03 -05:00
Luiz Augusto von Dentz
e919054155 Bluetooth: GATT: Add option to enforce client change-unware state
This adds BT_GATT_ENFORCE_CHANGE_UNAWARE option which when enable
returns -EAGAIN when notifying or indicating if the client is
change-unware to conform with following statement on the spec:

  'BLUETOOTH CORE SPECIFICATION Version 5.1 | Vol 3, Part G page 2350:
   Except for the Handle Value indication, the  server shall not send
   notifications and indications to such a client until it becomes
   change-aware.'

Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2019-02-08 18:07:34 +02:00
Luiz Augusto von Dentz
aecf7c7076 Bluetooth: GATT: Store Client features
Client features shall be persisted across connections.

Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2019-02-08 18:07:34 +02:00
Luiz Augusto von Dentz
3cccf27b2d Bluetooth: GATT: Persist Client Features config only when paired
BLUETOOTH CORE SPECIFICATION Version 5.1 | Vol 3, Part G page 2405:

  'For clients with a trusted relationship, the characteristic value
  shall be persistent across connections. For clients without a
  trusted relationship the characteristic value shall be set to the
  default value at each connection.'

Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2019-02-08 18:07:34 +02:00
Luiz Augusto von Dentz
daac1fa77a Bluetooth: GATT: Implement Robust Caching
This implement Robust Caching which is mandatory when Database Hash and
Service changed Characteristics are supported.

Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2019-02-08 18:07:34 +02:00
Luiz Augusto von Dentz
a3bca71a5e Bluetooth: GATT: Implement Database Hash
This implements the Database Hash characteristic which generates a hash
with the contents of certain attributes. The generation of hash is
usually offloaded to the systemwq using a delayed work so that when
application register multiple services only one hash needs to be
calculated.

Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2019-02-08 18:07:34 +02:00
Luiz Augusto von Dentz
ad9846b928 Bluetooth: GATT: Implement Client Supported Features
The Client Supported Features characteristic is used by the client to
inform the server which features are supported by the client.

Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2019-02-08 18:07:34 +02:00