Commit Graph

34 Commits

Author SHA1 Message Date
Arkadiusz Lichwa
134ae99d35 Bluetooth: Refactor LE Connection Params validator
Move le_validate_conn_params() interface to internal HCI
header to be commonly shared between HCI and L2CAP layers.
Refactor the interface and its users and rename related to Connection
Parameters Update procedure values used for validation.

< ACL Data TX: Handle 42 flags 0x00 dlen 16                                                                                                                          [hci1] 2832.387859
      LE L2CAP: Connection Parameter Update Request (0x12) ident 1 len 8
        Min interval: 40
        Max interval: 56
        Slave latency: 0
        Timeout multiplier: 0
@ Device Connected: 00:AA:01:00:00:23 (1) flags 0x0000
< HCI Command: LE Read Remote Used Features (0x08|0x0016) plen 2                                                                                                     [hci0] 2832.389374
        Handle: 42
> ACL Data RX: Handle 42 flags 0x02 dlen 16                                                                                                                          [hci0] 2832.389437
      LE L2CAP: Connection Parameter Update Request (0x12) ident 1 len 8
        Min interval: 40
        Max interval: 56
        Slave latency: 0
        Timeout multiplier: 0
> HCI Event: Number of Completed Packets (0x13) plen 5                                                                                                               [hci1] 2832.389440
        Num handles: 1
        Handle: 42
        Count: 1
> HCI Event: Command Status (0x0f) plen 4                                                                                                                            [hci0] 2832.389443
      LE Read Remote Used Features (0x08|0x0016) ncmd 1
        Status: Success (0x00)
> HCI Event: LE Meta Event (0x3e) plen 12                                                                                                                            [hci0] 2832.389444
      LE Read Remote Used Features (0x04)
        Status: Success (0x00)
        Handle: 42
        Features: 0x03 0x00 0x00 0x00 0x00 0x00 0x00 0x00
          LE Encryption
          Connection Parameter Request Procedure

< ACL Data TX: Handle 42 flags 0x00 dlen 10                                                                                                                          [hci0] 2832.393154
      LE L2CAP: Connection Parameter Update Response (0x13) ident 1 len 2
        Result: Connection Parameters rejected (0x0001)
> ACL Data RX: Handle 42 flags 0x02 dlen 10                                                                                                                          [hci1] 2832.393181
      LE L2CAP: Connection Parameter Update Response (0x13) ident 1 len 2
        Result: Connection Parameters rejected (0x0001)

Rejected due to Timeout multiplier: 0.

Change-Id: Idaf4f452f560ff71d9637ec5d793154190e94b35
Signed-off-by: Arkadiusz Lichwa <arkadiusz.lichwa@tieto.com>
Signed-off-by: Mariusz Skamra <mariusz.skamra@tieto.com>
2016-02-05 20:15:38 -05:00
Arkadiusz Lichwa
87b219cc05 Bluetooth: Update LE Exchange Features event handler
Adds conditions to trigger L2CAP based Update Connection Parameters
and HCI based Connection Parameters Request Procedure.

Change-Id: I66e4a977b534afc4a10d4eba54ee3eb95c2166ef
Signed-off-by: Arkadiusz Lichwa <arkadiusz.lichwa@tieto.com>
Signed-off-by: Mariusz Skamra <mariusz.skamra@tieto.com>
2016-02-05 20:15:37 -05:00
Mariusz Skamra
6b4f7025f2 Bluetooth: Start using atomic flags to indicate bt_dev state
With this patch advertising state and scanning state are stored as flags.

Change-Id: I5d2dc37972620ee89aaf55d45e294e8be82863d3
Signed-off-by: Mariusz Skamra <mariusz.skamra@tieto.com>
2016-02-05 20:14:43 -05:00
Johan Hedberg
e060c621d1 Bluetooth: Move le_conn_update() to conn.c
Change-Id: Iaaf1cce09aef2e09c0cb2cca3500368a5faec2ae
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:40 -05:00
Johan Hedberg
5f33744a4c Bluetooth: Move le_start_encryption to conn.c
Change-Id: Id9c042663e6f58aba6ec34165b7b244650317969
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:40 -05:00
Johan Hedberg
e0e6416065 Bluetooth: Export bt_dev through hci_core.h
Rename the hci_core.c (previously internal) variable 'dev' to 'bt_dev'
and export it through hci_core.h. This way e.g. bt_conn doesn't need
to store an internal reference to it.

Change-Id: Ic1368c8f20d307c6a13a412f80d8183b56d7a76b
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:40 -05:00
Johan Hedberg
7ed81c7a22 Bluetooth: Enhance bt_le_scan_update() for active scanning
Let bt_le_scan_update() perform all necessary changes to active
scanning so that it's even more helpful to the start/stop scanning
APIs as well as the bt_connect_le() API.

Change-Id: I8ee2daf96297749f782d364dfb66c7d0bbc48f5e
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:40 -05:00
Johan Hedberg
824135122f Bluetooth: Move bt_disconnect to conn.[ch] and rename it appropriately
The bt_disconnect deals with the bt_conn object and should therefore
reside in conn.c and be exported through conn.h. It should also have
the appropriate bt_conn_* prefix.

Change-Id: I75eb648fd9aa8ced9a991d472c319d25f4b772af
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:40 -05:00
Mariusz Skamra
d699296a45 Bluetooth: Add passive scanning support
Part of General Connection Establishment Procedure.

Active scanning is enabled by task and has higher priority than
passive scan. If passive scan is running and task wants to enable
scan (active) scanning will be restarted in active mode. Passive
scan is enabled implitly while app calls bt_connect_le.
Instead of directly call hci_le_create_conn, it is called from
device_found if addr obtained from advertisement matches address
we want to connect. App calling bt_stop_scanning can only stop
active scan.

Change-Id: I01805c51f3d821bbd827af75e5d1d4350169241d
Signed-off-by: Mariusz Skamra <mariusz.skamra@tieto.com>
2016-02-05 20:14:35 -05:00
Szymon Janc
1fc691ed42 Bluetooth: Add support for sending HCI LE Start Encryption command
This command will be used to enable encryption when acting as master.

Change-Id: Iaaf1d5b98bfcfcf17a5cc7006a6c40d0905011fd
Signed-off-by: Szymon Janc <szymon.janc@tieto.com>
2016-02-05 20:14:31 -05:00
Johan Hedberg
fa1bf41477 Bluetooth: Fix minor coding style issues
Change-Id: I0e78bce8cdbf46252f4cfc4483995ba7583915f7
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:24 -05:00
Arkadiusz Lichwa
ac98b4e221 Bluetooth: Handle update connection parameters
When connected, the peripheral/slave can trigger changing connection parameters.
Handle such request on central/master and if needed update controller settings
regarding the relevant connection parameters.

Change-Id: If3c1d91752f8d3875918bd8bfe923330790f530e
Signed-off-by: Arkadiusz Lichwa <arkadiusz.lichwa@tieto.com>
2016-02-05 20:14:24 -05:00
Johan Hedberg
9bea2c3cfc Bluetooth: Move HCI driver API to dedicated header file
This makes it clearer that this is a specialized API not intended for
general app usage (unlike most other things in bluetooth.h).

Change-Id: I0ce1d5903610a9b3a99cf0be9f0e1462b04bf45a
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:23 -05:00
Johan Hedberg
e3fd3090ba Bluetooth: Rename cmd_rx_queue/fiber to rx_prio_queue/fiber
With the introduction of the Number of Completed Packets event
handling this FIFO & fiber aren't anymore strictly HCI command
completion related. Rename them therefore to something that more
appropriately describes their purpose.

Change-Id: Ia53dea8b5ec0098459f23918a5483075757d9202
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:18 -05:00
Johan Hedberg
384533912d Bluetooth: Move key handling to separate files
In preparation of adding more key support and to not bloat hci_core.c
prepare a new .c file for the key management code.

Change-Id: I5129a7a3a5d495a299f75e4e669253446a276142
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:17 -05:00
Johan Hedberg
2dc3554e1c Bluetooth: Rename bt_addr_is_rpa to bt_addr_le_is_rpa
The input paramter is bt_addr_le_t so the function should be named
accordingly.

Change-Id: I7b796020d6e43ae1aa76a261cbfbaf7cba163029
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:17 -05:00
Johan Hedberg
12229a8f49 Bluetooth: Fine-tune stack size adjustment for debug
512 is a more accurate description than 1024 of the stack usage impact
of enabling debug logs.

Change-Id: I4b79b4eb9724ba624ff546973a1126c62382d1aa
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:17 -05:00
Johan Hedberg
8eabf208d7 Bluetooth: Add convenience macros for defining stacks
To not have to always do the __noinit, debug log correction and 4-byte
alignement declaration create some helper macros for defining the
stacks.

Change-Id: I2de5068d7044af3f348ed01281498a777d04c97d
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:17 -05:00
Johan Hedberg
c82b96d425 Bluetooth: Tune stack sizes based on latest analysis
Set the stack sizes based on what the current utilization is for SMP
and GATT tests.

Change-Id: I892282a088d7b244f7abdbc92368addc9c19e4eb
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:16 -05:00
Johan Hedberg
8d0d247f23 Bluetooth: Add helpers for checking LE address type
For LE Privacy support we'll need to be able to distinguish which
addresses are RPAs and which are Identity Addresses.

Change-Id: Ie244a4d53ffddc435edbd6d69d7ecca205202f18
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:04 -05:00
Johan Hedberg
9b40ec3360 Bluetooth: Introduce dedicated Bluetooth address types
We use addresses in lots of places and with LE we always need to pass
around the type in addition to the address value. Defining dedicated
types for addresses makes the code much simpler.

Change-Id: Ie8b495dce50e3f084685909c19acc5d08e2cca10
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:03 -05:00
Johan Hedberg
d8e9e71acd Bluetooth: Add dedicated stack for Command Complete/Status events
These events are special since they release any blocking
bt_hci_cmd_send_sync() calls. In order to be able to use the send_sync
API from HCI Event handlers without deadlocking having the Command
Complete/Status events processed through a dedicated fiber is
essential.

Change-Id: Id5c597d618bf326a8efb7c9ca2500af60a502d77
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:03 -05:00
Johan Hedberg
a4ecff8dad Bluetooth: Rename cmd_stack/fiber/queue to cmd_tx_stack/fiber/queue
To prepare for a dedicated Command Complete/Status processing fiber,
add 'tx' to the existing names to differentiate from the 'rx' in the
upcoming names.

Change-Id: I59e0ba34502e4a2341396f81bfb5829c296b35a5
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:03 -05:00
Johan Hedberg
6140bd04fe Bluetooth: Store full LTK information
We also need to store the EDiv & Rand values to be able to do correct
look-up of LTKs.

Change-Id: If6dbfc7569d18a4c8597a401deccad3ef8cb51ad
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:03 -05:00
Johan Hedberg
619bf02559 Bluetooth: Add runtime storage & API for pairing related keys
Add runtime storage of pairing related keys, along with a config
option to control how many pairings are supported.

Change-Id: Ib5177d2b6fbb0d2d458b539a3f1095c1dce135ff
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:03 -05:00
Arkadiusz Lichwa
e60b8f1927 Bluetooth: Intro of basic ADV handler
Adds basic handler deserializing advertising data.
Adds helper reformat function.

Change-Id: I6385249c39e92b2f068a01e89d34530b7a321f34
Signed-off-by: Arkadiusz Lichwa <arkadiusz.lichwa@tieto.com>
2016-02-05 20:13:58 -05:00
Arkadiusz Lichwa
d46de84c03 Bluetooth: Create basic LE scan interface
Adds needed data structures.
Adds basic HCI interface to start/stop LE scan.

Change-Id: I69790b11d191078952ce05da386961c5c55a7172
Signed-off-by: Arkadiusz Lichwa <arkadiusz.lichwa@tieto.com>
2016-02-05 20:13:58 -05:00
Johan Hedberg
9b1e7a935b Revert "Bluetooth: Rotate outgoing ACL packets via a pending queue"
This reverts commit ce981a0f51f94a3f23c43b947a2ce62a1ef08623.

Now that we're back to using an ACL buffer semaphore the rotation of
outgoing ACL packets via a pending queue is no-longer necessary.

Change-Id: I0da42992bed2abba1544b1a82c31bc71342ecf70
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:13:57 -05:00
Johan Hedberg
1f5b1b83e0 Bluetooth: Reintroduce ACL buffers semaphore
Since nano_sema is after all able to handle multiple waiters we can
have a cleaner and more efficient implementation by using a single
semaphore for all of the connection tx fibers.

Change-Id: Iafb595ae556a2dd826502cf282b88548cb34f336
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:13:57 -05:00
Andrei Emeltchenko
7a995c0a60 Bluetooth: Export bt_hci_cmd_send_sync() for SMP use
The function bt_hci_cmd_send_sync() would be used in LE SMP code for
using HCI controller for encryption.

Change-Id: I0f8f7963a0bf0597b59f24e6d21b6d1f49072f43
Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2016-02-05 20:13:57 -05:00
Johan Hedberg
d87080392b Bluetooth: Export HCI command sending APIs internally
The APIs to send HCI commands will be needed by more than just
hci_core.c. This patch exports them through hci_core.h.

Change-Id: I7c047f070f25c9f2f8685b46bbce84c4ed459b44
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:13:50 -05:00
Johan Hedberg
f9725ca3a9 Bluetooth: Remove unnecessary ACL semaphore
Now that we never have more outgoing ACL buffers in circulation than
what the controller is capable of accepting we don't need a separate
semaphore for managing the flow of ACL data to the controller.

Change-Id: I28a14791e8f46ac62b8025956c2865039eae9059
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:13:50 -05:00
Johan Hedberg
cb6b288252 Bluetooth: Rotate outgoing ACL packets via a pending queue
To ensure that we never have more outgoing ACL buffers available than
the controller is willing to accept we should hold on to them between
calling drv->send() and getting the corresponding Number of Completed
Packets event. This patch adds a temporary FIFO in bt_dev for this.

Change-Id: I918119a03081d507de2bb4a731b2709ea99a648d
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:13:50 -05:00
Johan Hedberg
64b6f11450 Bluetooth: Move bt_dev definition to internal header file
Several Bluetooth sub-modules will need to have access to the bt_dev
struct definition. This patch moves it to the internal hci_core.h
header file where the sub-modules can access it from.

Change-Id: Ic949c03eb5df86f60a2dac28322d029de10822b5
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:13:49 -05:00