Commit Graph

93 Commits

Author SHA1 Message Date
Johan Hedberg
4dae513d4b Bluetooth: Add contexts for SMP & ATT specific data
All fixed channels will need per-connection contexts. Right now in
addition to the L2CAP (LE) signaling channel the other two fixed ones
are ATT and SMP.

Change-Id: I56dda6b903ef703e453438e03a99c704aa77899a
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:02 -05:00
Johan Hedberg
19deebbecf Bluetooth: Move L2CAP context into dedicated struct
In preparation for having per-fixed channel contexts move the L2CAP
signaling channel specific data into a dedicated struct.

Change-Id: Iaacb5e1c7408be67740434f31ef56f94706ad327
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:02 -05:00
Szymon Janc
62267639ac Bluetooth: Fix not waiting for all commands to complete on init
For LE-only controller init procedure should wait for last HCI command
(Set Controller To Host Flow Control) to complete before returning.

Change-Id: Ic01e0cbaebf19d61560faab2ae01205c2eb22b77
Signed-off-by: Szymon Janc <szymon.janc@tieto.com>
2016-02-05 20:14:02 -05:00
Johan Hedberg
46372d712c Bluetooth: Fix missing bt_buf_pull when parsing adv report
The code would only have worked for reports with num_reports being
equal to 1. Any event with multiple reports would have been
incorrectly parsed because of a missing bt_buf_pull() for the initial
one-byte num_reports value.

Change-Id: I0ac92edb792d559fb8ff84e40a4b4766f46afe58
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:02 -05:00
Johan Hedberg
19707e8257 Bluetooth: Use 'void *' also for bt_buf_pull/push return value
To make the bt_buf APIs consistent with the recent bt_but_add changes
and more user friendly, change the pull() and push() return values
also to 'void *'.

Change-Id: I25242635c87882db99152735c22316d4de00d363
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:02 -05:00
Johan Hedberg
90b27c478d Bluetooth: Remove unnecessary bt_buf_add type casts
Now that bt_buf_add() returns 'void *' there's no need to explicitly
type cast its return value anymore.

Change-Id: I6d5c9d323dc08cb5a2b928977c1bbf3d741e5d8e
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:02 -05:00
Johan Hedberg
d6a03600b2 Bluetooth: Change bt_buf_add return type to 'void *'
Almost all callers of bt_buf_add end up having to do explicit type
casts of the return value since 'uint8_t *' rarely fits what's needed.
Changing the return type to 'void *' removes this extra type casting
need and makes the API friendlier to its users.

Change-Id: I6a79605006153b6d09f0d662a051cb599af68c37
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:14:02 -05:00
Luiz Augusto von Dentz
dd52c0109f Bluetooth: Make use of bt_buf_pull_le16
Remove the memcpy code and instead use bt_buf_pull_le16 for unaligned
access and byte order conversion.

Change-Id: I0216042566e27d6a513b302ae1ea78b49f2f1c31
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:14:02 -05:00
Luiz Augusto von Dentz
d1b61254f3 Bluetooth: Add bt_buf_pull_le16 helper
bt_buf_pull_le16 convert the initial 16 bits to little endian.

Change-Id: I6f6e9d63fc19b0579d9f445e15e975929fc63ba9
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:14:02 -05:00
Luiz Augusto von Dentz
009899116d Bluetooth: Fix missing braces in ATT code
Change-Id: Icc241250a357efb06614d841cc37de77dddece2e
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:14:02 -05:00
Luiz Augusto von Dentz
09f8409bfe Bluetooth: Fix using wrong PDU in handlers
Both Write Command and Signed Write command should use their respective
packed struct.

Change-Id: Id786d1e0ee0327f662c68fa1d2f3d3bf19a237fc
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:14:02 -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
Luiz Augusto von Dentz
329e4276ae Bluetooth: Fix ATT define values
The codestyle is to use lower case for hexadecimal values.

Change-Id: I0e73cdf6d8ff4b48e6cb814f705193c65a01d14a
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:13:58 -05:00
Luiz Augusto von Dentz
f8215b94f5 Bluetooth: Move Write Command definitions
This changes order of Write Command definitions so it is consistent with
the opcode value.

Change-Id: Ie0eaaaec75d7b17d2da62a6c930ec56d1e666253
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:13:58 -05:00
Luiz Augusto von Dentz
f436fc835e Bluetooth: Warn unkown ATT PDUs
The code should always warn about unkown PDUs since it could be causing
unexpected behavior or that something is missing.

Change-Id: Idc608ca221c5ff6e440f90fa24c2cd6a3e6437fc
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:13:58 -05:00
Johan Hedberg
36bf88678c Bluetooth: coding-style: Fix missing braces in for-loop
Even one-line loops & branches should have braces.

Change-Id: Ie82e4dce1b7a2c9181f631b20d6532f1866c1197
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:13:58 -05:00
Johan Hedberg
89c6fe152f Bluetooth: Treat unkown SMP PDU as warning
Unknown SMP PDUs may be a bad thing so upgrade the respective log from
debug to a warning.

Change-Id: I05072dcbedb071ff968dd9ddfb075770110b5853
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:13:58 -05:00
Johan Hedberg
cde6b86657 Bluetooth: Treat unknown L2CAP PDUs as warnings
There are valid cases where we wont have handlers for unknown L2CAP
PDUS. Therefore, convert these logs from error to warnings.

Change-Id: I309b8074f9ef883ce981a4a2fbc6ab8421fda62a
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:13:58 -05:00
Johan Hedberg
4cabc6902d Bluetooth: Convert unnecessary errors to debug logs
The unhandled opcodes and events are not really errors since we don't
need general handlers for everything. For events its good to have a
warning but for completed commands the cmd_send_sync() API means we
don't need generic handlers for everything.

Change-Id: Ie580189f3e6d69ef10d10e6c6080d5e983c08e8e
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:13:58 -05:00
Johan Hedberg
8271a58dd4 Bluetooth: Fix missing newline in debug log
Add missing newline character to debug log.

Change-Id: Ic78ae2587d8f48b1af9754f1484350e94039f6f7
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:13:58 -05:00
Johan Hedberg
3beca82c90 Bluetooth: Add debug config options for all current sub-modules
We want to be able to do fine-grained enabling of debug logs for the
various Bluetooth sub-modules. They all default to 'n' so an app
writer would need to go and enable the specific ones that they're
interested in.

Change-Id: I17105adf133d441dfc811bdd66a00be015813679
Signed-off-by: Johan Hedberg <johan.hedberg@intel.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
Luiz Augusto von Dentz
dd7a73a228 Bluetooth: Rename bt_att_info structs and their defines
This replaces _1 and _2 with the respective UUID size they carry.

Change-Id: I254afe335121aef23ed49a5fe0c49520937cc14f
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:13:58 -05:00
Luiz Augusto von Dentz
bfcd16be8b Bluetooth: Add ATT server initiated skeletons
This adds the remaining ATT PDU definitions.

Change-Id: Id58116e00ba0d3a0ea4b0f94bd262290342e7e9f
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:13:58 -05:00
Luiz Augusto von Dentz
ed7b333385 Bluetooth: Add ATT Execute Write Request skeleton
This adds the defines for Execute Write PDUs along with initial code to
parse them.

Change-Id: Ifa8229b9f3bf0a60d9abe553263b32397d1ba881
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:13:58 -05:00
Luiz Augusto von Dentz
0fe5fa9fcf Bluetooth: Add ATT Prepare Write Request skeleton
This adds the defines for Prepare Write PDUs along with initial code to
parse them.

Change-Id: Ia7210dbe4662afbebe742b5b1a7b8f08999adf2a
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:13:58 -05:00
Luiz Augusto von Dentz
d3acf5f16a Bluetooth: Add ATT Signed Write Command skeleton
This adds the defines for Signed Write Command along with initial code
to parse it.

Change-Id: I2071163c8468a6580d9a9305095187a140c80a43
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:13:58 -05:00
Luiz Augusto von Dentz
75f56d9e07 Bluetooth: Add ATT Write Command skeleton
This adds the defines for Write Command along with initial code to parse
it.

Change-Id: Ifabcfa8efb54b5135a540718fb60d9a656cd088c
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:13:58 -05:00
Luiz Augusto von Dentz
9e8c1d1326 Bluetooth: Add ATT Write Request skeleton
This adds the defines for Write PDUs along with initial code to parse
them.

Change-Id: I69d2002b3e6da80037c058f42f543a0ab4765958
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:13:58 -05:00
Luiz Augusto von Dentz
75aab47603 Bluetooth: Add ATT Read by Group Type Request skeleton
This adds the defines for Read by Group Type PDUs along with initial
code to parse them:

> ACL Data RX: Handle 3585 flags 0x02 dlen 11
      ATT: Read By Group Type Request (0x10) len 6
        Handle range: 0x0001-0xffff
        Attribute group type: Primary Service (0x2800)
< ACL Data TX: Handle 3585 flags 0x00 dlen 9
      ATT: Error Response (0x01) len 4
        Read By Group Type Request (0x10)
        Handle: 0x0001
        Error: Attribute Not Found (0x0a)

Change-Id: Iebc84e7a9c405fa58b7984602d2d27f79d6033a7
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:13:58 -05:00
Luiz Augusto von Dentz
f00308f0eb Bluetooth: Add ATT Read Mutiple Request skeleton
This adds the defines for Read Multiple PDUs along with initial code to
parse them.

Change-Id: I34f597881e3bdb9325ffbf2bda42b7ae6710c3ae
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:13:58 -05:00
Luiz Augusto von Dentz
eedc01d6d5 Bluetooth: Add ATT Read Blob Request skeleton
This adds the defines for Read Blob PDUs along with initial code to
parse them.

Change-Id: I5a2a2e2e32bf44d98ce928b3d57ad7f05059a927
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:13:58 -05:00
Luiz Augusto von Dentz
dfdd657b37 Bluetooth: Add ATT Read Request skeleton
This adds the defines for Read PDUs along with initial code to parse
them.

Change-Id: I3ec54a0bf2394b54bd8b08957533f0826bf4a23a
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:13:58 -05:00
Luiz Augusto von Dentz
0d853d64c2 Bluetooth: Add ATT Read by Type Request skeleton
This adds the defines for Read by Type Value PDUs along with initial
code to parse them:

> ACL Data RX: Handle 3585 flags 0x02 dlen 11
      ATT: Read By Type Request (0x08) len 6
        Handle range: 0x0001-0xffff
        Attribute type: Characteristic (0x2803)
< ACL Data TX: Handle 3585 flags 0x00 dlen 9
      ATT: Error Response (0x01) len 4
        Read By Type Request (0x08)
        Handle: 0x0001
        Error: Attribute Not Found (0x0a)

Change-Id: I0b4371b8decebf33710a949552a11c80c544b5f8
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:13:58 -05:00
Johan Hedberg
f73b3b954e Bluetooth: Remove unnecessary reinit of buffers
Now that we no-longer need to set an upper limit of outgoing ACL
buffers (thanks to reintroducing the ACL semaphore) we don't need to
perform a second initialization of the buffers.

Change-Id: Ie59bf7cb0e6915f1c67ca3dfb03244f9b4af94d5
Signed-off-by: Johan Hedberg <johan.hedberg@intel.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
Luiz Augusto von Dentz
d51985e4ce Bluetooth: Add ATT Find Information by Type Value Request skeleton
This adds the defines for Find Information by Type Value PDUs along
with initial code to parse them.

Change-Id: I9eaf2df390ca6f78530df7f1ae606b588d1fcb2e
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
2016-02-05 20:13:57 -05:00
Luiz Augusto von Dentz
b6d35d8281 Bluetooth: Add ATT Find Information Request skeleton
This adds the defines for Find Information PDUs along with initial code
to parse them.

Change-Id: If34533cca4a1a554ca3f119c7639a1167dae0ff2
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@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
Andrei Emeltchenko
82c913d53c Bluetooth: Add SMP encryption key check
Fixes PTS test case TC_EKS_BI_02_C sending correct failed reply to
wrong key size.
...
> ACL Data RX: Handle 64 flags 0x02 dlen 11
      SMP: Pairing Request (0x01) len 6
        IO capability: KeyboardDisplay (0x04)
        OOB data: Authentication data not present (0x00)
        Authentication requirement: No bonding, No MITM, Legacy, No
Keypresses (0x00)
        Max encryption key size: 6
        Initiator key distribution: <none> (0x00)
        Responder key distribution: <none> (0x00)
< ACL Data TX: Handle 64 flags 0x00 dlen 6
      SMP: Pairing Failed (0x05) len 1
        Reason: Encryption key size (0x06)
...

Change-Id: I1c02cbc03d1aaf6221d7a6ddfd9bc7ab30ca9586
Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2016-02-05 20:13:57 -05:00
Andrei Emeltchenko
0aadf6ce69 Bluetooth: Add SMP Pairing Confirm skeleton
Change-Id: I484e24f111212acf3e920b4eed56d69e6b94493d
Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2016-02-05 20:13:57 -05:00
Andrei Emeltchenko
b7dddcff00 Bluetooth: Add SMP Pairing Request skeleton
Add handling of SMP Pairing Request for Pairing Feature Exchange. In
the beginning support Just Works pairing method.

Change-Id: I8aab10683e9f26db4e0e9cb1bb9a8dc8940f0ab0
Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2016-02-05 20:13:57 -05:00
Andrei Emeltchenko
d780f70339 Bluetooth: trivial empty space fix
Change-Id: I933dae2543f0f0c722736a3b3be79cf5494e9ff6
Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2016-02-05 20:13:57 -05:00
Andrei Emeltchenko
d135dcf0e5 Bluetooth: Fix using magic number
Instead of magic number use sizeof().

Change-Id: I6c9db3d7a371312d0aab4fd7dc6a9d0c92449afc
Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2016-02-05 20:13:57 -05:00
Johan Hedberg
5cff2d0b78 Bluetooth: Add debug support for buffers
For debugging buffer access related issues it's convenient to be able
to enable logs and extra checks specifically for the buffer related
code.

Change-Id: Ibb87d344809d2bcada10a22b16a23e6556f4ae79
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
2016-02-05 20:13:57 -05:00
Andrei Emeltchenko
3750a7eb36 Bluetooth: Implement SMP error response
Add bt_smp_create_pdu() helper and implement send_err_rsp for an
unknown SMP command.

Change-Id: Iaed0811f3323f62aaa56eb531fb383cf15396ef8
Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2016-02-05 20:13:57 -05:00
Andrei Emeltchenko
69f94f2484 Bluetooth: Add skeleton for SMP handling
Add support for Security Manager Protocol fixed channel. SMP handling
would be done in smp.c.

Change-Id: I26d3d098c6b1c3d03aad958d83dfee09e03add1d
Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2016-02-05 20:13:57 -05:00
Andrei Emeltchenko
37d3fae356 Bluetooth: Add standard license header to l2cap.c
Add missing header with license.

Change-Id: I754bc0c3b4fd6b2699930fb9e126e788a438168a
Signed-off-by: Andrei Emeltchenko <andrei.emeltchenko@intel.com>
2016-02-05 20:13:57 -05:00
Johan Hedberg
90475d78f2 Bluetooth: Use min() macro where possible
There's no need to have custom minimum value evaluation logic when
there's already a convenience macro available.

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