Commit graph

1409 commits

Author SHA1 Message Date
lly b0a6fc7937 ble_mesh: Optimize some mesh log output 2020-05-13 03:40:30 +00:00
lly 30d62cc00f ble_mesh: Fix restore when revoke keys [Zephyr]
Store keys (NetKey and AppKey) again after revoking.
2020-05-13 03:40:30 +00:00
lly 2983f6edb1 ble_mesh: Spit mesh_util.h into different header files
Split mesh_util.h into mesh_byteorder.h, mesh_compiler.h,
mesh_ffs.h and mesh_util.h based on the classification of
Zephyr, which will make further porting more clear.
2020-05-13 03:40:30 +00:00
lly 35c5a7a08c ble_mesh: Split mesh os related into a separate file 2020-05-13 03:40:30 +00:00
lly 0daac93e4e ble_mesh: Split mesh mutex into a separate file 2020-05-13 03:40:30 +00:00
lly ec34cd8338 ble_mesh: Rename mesh_kernel.* to mesh_timer.* 2020-05-13 03:40:30 +00:00
lly 92cfbe3c6c ble_mesh: Add and use transport macro definitions [Zephyr] 2020-05-13 03:40:30 +00:00
lly e2186b1d3a ble_mesh: Friend SeqAuth cleanup [Zephyr]
The Friend queue uses the message SeqAuth to determine whether the
message is already in the queue. To facilitate this, the SeqAuth is
passed around as a pointer throughout the transport modules. In the
bt_mesh_ctl_send functions, this parameter is also exposed in the API,
but the internal usage is inconsistent and buggy. Also, no one actually
uses this parameter.

- Removes seq_auth param from bt_mesh_ctl_send, instead passing NULL
  directly to the friend module, to enforce its addition to the queue.
- Makes the seq_auth pointer const throughout the friend module.
2020-05-13 03:40:30 +00:00
lly 489d32663b ble_mesh: Rework msg_cache [Zephyr]
Changes the behavior of the message cache to optimize for cache
capacity. Previously, the message cache's primary function was to avoid
decrypting messages multiple times, although the cache's main function
in the spec is to avoid message rebroadcasting. Optimizing for minimal
decryption causes us to fill the network cache faster, which in turn
causes more cache misses, potentially outweighing the advantage.

Now stores src + seq in message cache instead of field hash value. This
cuts cache size in two, while including more of the sequence number than
before.

Adds messages to the cache only after the packet is successfully
decrypted. This reduces noise in the cache, and ensures that no
invalid deobfuscations are added.

Additionally, this fixes a bug where multiple calls to net_decrypt with
the same packet failed, as the message cache found its own entry from
the previous call.
2020-05-13 03:40:30 +00:00
lly febe084113 ble_mesh: Segmented TX to groups [Zephyr]
Implements several changes to the transport layer segmented tx to
improve group message performance:
- Moves retransmit counter to tx context instead of per packet. As every
  unacked packet is sent every retransmit, the retransmit counters would
  be the same in each segment. This makes it easier to control progress.
- Delays the scheduling of the retransmit until the completion of the
  last segment by adding a seg_pending counter. This is essentially the
  same as the old behavior, except that the old behavior might retrigger
  the sending before all segments are finished if the advertising is
  slow.
- Allows the group transmits to stop as soon as all retransmits have
  been exhausted, instead of timing out waiting for acks that won't
  come. This allows group tx to finish without error.
- Fixes a bug where a failed TX would block IV update.
- Cancels any pending transmissions of acked segments.
- Reduces log level for several common group tx scenarios that aren't
  erronous.
2020-05-13 03:40:30 +00:00
lly b6729860dd ble_mesh: Add comment explaining use of byte order [Zephyr]
Add comment that explains why a different byte order is used for the
3-byte opcode on the CID part of the opcode.
2020-05-13 03:40:30 +00:00
lly 9f9acb6c4a ble_mesh: Use 24-bit functions [Zephyr]
Use 24-bit functions for byteorder and net_buf in order to make the
byteorder used more readable.
2020-05-13 03:40:30 +00:00
lly 6d77a8b0c8 ble_mesh: Optimize net_buf_simple routines [Zephyr]
Use sys_put_xyz() helpers instead of memcpy() whenever possible. This
brings in straight-line inline code for pushes and adds of known,
small sizes.
2020-05-13 03:40:30 +00:00
lly fa06b60568 ble_mesh: Add PRIu64 & PRIx64 in mesh_types.h 2020-05-13 03:40:30 +00:00
lly bb09078b65 ble_mesh: Add push functions for supported bit-variants [Zephyr]
Add push functions for bit-widths supported by add and pull functions.
2020-05-13 03:40:30 +00:00
lly 0522ce7cf3 ble_mesh: Add support for 64 bit data type [Zephyr]
This enables pulling and pushing values in 64 bit format.
2020-05-13 03:40:30 +00:00
lly b41d50908b ble_mesh: Add support for 48 bit data type [Zephyr]
This enables pulling and pushing values in 48 bit format.
2020-05-13 03:40:30 +00:00
lly be57df5e19 ble_mesh: Add 48 bit variants [Zephyr]
This adds sys_*_*48 functions that operation on a 48 bits values.
2020-05-13 03:40:30 +00:00
lly fd5e18eb49 ble_mesh: Add support for 24 bit data type [Zephyr]
This enables pulling and pushing values in 24 bit format.
2020-05-13 03:40:30 +00:00
lly 4963d4ddf8 ble_mesh: Add 24 bit variants [Zephyr]
This adds sys_*_*24 functions that operation on a 24 bits values.
2020-05-13 03:40:30 +00:00
lly bc1722260f ble_mesh: Group resends in proxy nodes [Zephyr]
Resend transport segments for groups on the advertiser interface, even
if a connected proxy node holds the group.
2020-05-13 03:40:30 +00:00
lly 968772d18a ble_mesh: Typo in condition in comp_add_elem of cfg_srv [Zephyr]
Vendor model IDs take up four (not two) bytes in the composition
2020-05-13 03:40:30 +00:00
lly a45406fe6e ble_mesh: GATT Proxy Spec 1.0.1 changes [Zephyr]
Backport of https://github.com/apache/mynewt-nimble/pull/724

Mesh spec 1.0.1 changes proxy disabling behavior to only affect the
relaying from proxy nodes. Previously, disabling proxy would shut down
all proxy and node activity.

Tweaks from the original commit:
- Removed redundant call to bt_mesh_adv_update() in gatt_proxy_set()
- Removed invalid ref to 4.2.11.1 in node_identity_set()

---

According to Mesh Profile Spec 1.0.1, Section 4.2.11:
"If the Proxy feature is disabled, a GATT client device can connect
over GATT to that node for configuration and control. Messages from
the GATT bearer are not relayed to the advertising bearer."

Moreover some notes have been removed from the spec compared to
version 1.0:

Mesh Profile Spec 1.0, Section 4.2.11:

"Upon transition from GATT Proxy state 0x01 to GATT Proxy state 0x00
the GATT Bearer Server shall disconnect all GATT Bearer Clients."

"The Configuration Client should turn off the Proxy state as the last
step in the configuration process."

Mesh Profile Spec 1.0, Section 4.2.11.1:

"When the GATT Proxy state is set to 0x00, the Node Identity state
for all subnets shall be set to 0x00 and shall not be changed."
2020-05-13 03:40:30 +00:00
lly 10f2ed14eb ble_mesh: Support reliable sending when publishing [Zephyr]
Until now the choice of reliable sending (segmented messages with
acks) was implicitly dependent on the size of the payload. Add a new
member to the bt_mesh_model_pub to force using segment acks even when
the payload would fit a single unsegmented message.
2020-05-13 03:40:30 +00:00
lly cd19f6faf1 ble_mesh: Check device uuid when init provisioning 2020-05-13 03:40:30 +00:00
lly abcfcc47ec ble_mesh: Fix provisioning buffer initialization [Zephyr]
When PB-GATT support has been enabled the provisioning code "borrows"
the buffer from the proxy code. However, the way that initialization
was happening the proxy buffers were initialized only after
provisioning initialization, resulting in a corrupted buffer with
buf->data pointing to NULL. Reorder the initialization calls so that
proxy is done first and provisioning only after it.
2020-05-13 03:40:30 +00:00
lly e580f98b44 ble_mesh: Skip publish if update fails [Zephyr]
Allow models to skip a periodic publish interval by returning an error
from the publish update callback.

Previously, an error return from publish update would cancel periodic
publishing. This can't be recovered from, and as such, no valid model
implementation could return an error from this callback, and there was
no way to skip a periodic publish.
2020-05-13 03:40:30 +00:00
lly 50b4bea45c ble_mesh: Enable Segmented Control Messages [Zephyr]
The function bt_mesh_ctl_send() used to support maximum length of
11 bytes. The segmentation complies with the BLE Mesh Standard.
The ack is disabled in case of non unicast address.
2020-05-13 03:40:30 +00:00
lly 4748b07fa2 ble_mesh: Not ignore msg when fast prov is enabled
When fast provisioning is enabled, Provisioner shall not
ignore messages from the nodes whose addresses are not in
the provisioning database. Because other nodes which are
not provisioned by the Primary Provisioner will send node
address messages to the Primary Provisioner.
2020-05-13 10:10:40 +08:00
Island 2c1c87b37d Merge branch 'bugfix/ble_mesh_add_missing_cpp_v3.3' into 'release/v3.3'
ble_mesh: Add missing #ifdef __cplusplus (v3.3)

See merge request espressif/esp-idf!8615
2020-05-06 18:16:20 +08:00
Island 4ac84bca8b Merge branch 'bugfix/ble_mesh_compile_error_o2_v3.3' into 'release/v3.3'
ble_mesh: Fix compile error when -O2 (performance) is chosen (v3.3)

See merge request espressif/esp-idf!8618
2020-05-06 18:15:28 +08:00
Island 5a53e67c7e Merge branch 'bugfix/ble_mesh_provisioner_check_key_v3.3' into 'release/v3.3'
ble_mesh: Check if appkey exist before deleting it (v3.3)

See merge request espressif/esp-idf!8619
2020-05-06 18:09:32 +08:00
lly 745aecb03d ble_mesh: Fix node not erase info completely
Previously only mesh node info is supported to be stored
in flash. So when trying to reset the node, we only need
to judge if the BLE_MESH_VALID flag is set.
Currently we support storing both node & Provisioner info
in flash, when trying to erase the node info from flash,
the BLE_MESH_NODE flag will be checked. So we need to set
bt_mesh.flags to 0 when all the erase operations are done.
2020-05-06 11:45:02 +08:00
lly e36d1d2f8a ble_mesh: Check if appkey exist before deleting it 2020-05-06 11:37:03 +08:00
lly 1432daf4c6 ble_mesh: Add length check for some mesh operations 2020-05-06 11:33:41 +08:00
lly 6e7d43dd89 ble_mesh: Fix compile error when -O2 (performance) is chosen 2020-05-06 11:33:08 +08:00
lly 3b9e0657d8 ble_mesh: Add missing #ifdef __cplusplus 2020-05-06 11:19:05 +08:00
Island 53a0b3f951 Merge branch 'feat/ble_mesh_ble_adv_simultaneously_v3.3' into 'release/v3.3'
ble_mesh: Support BLE advertising simultaneously (v3.3)

See merge request espressif/esp-idf!8486
2020-05-06 11:14:52 +08:00
Island b0aeff4797 Merge branch 'bugfix/ble_mesh_rpl_list_size_v3.3' into 'release/v3.3'
ble_mesh: Associate replay protection list size with nodes count (v3.3)

See merge request espressif/esp-idf!8497
2020-05-06 11:14:42 +08:00
Island b33b6c4f2a Merge branch 'doc/ble_mesh_fixes_v3.3' into 'release/v3.3'
doc: Fix some ble mesh description (v3.3)

See merge request espressif/esp-idf!8504
2020-05-06 11:12:46 +08:00
Island 93a13dfd10 Merge branch 'feat/ble_mesh_sensor_model_example_v3.3' into 'release/v3.3'
ble_mesh: Add ble mesh sensor model examples (v3.3)

See merge request espressif/esp-idf!8509
2020-05-06 11:11:36 +08:00
lly a2dbe4c452 ble_mesh: Fix client local parameters not initialized 2020-04-30 11:47:12 +00:00
lly eedaf45f43 ble_mesh: Continue node info restore even if failure happens
During BLE Mesh Provisioner initialization, the stack will restore
the nodes information if settings storage is enabled.
Previously when a failure happens (e.g. found the same uuid) during
the restore procedure, the information of the following nodes will
not be restored and error will be directly returned.
But this will introduce some problem with user experience, because
some newly provisioned nodes information will not be restored and
Provisioner will not be able to control those nodes.
So we change the operation here, when a failure happens during the
restore procedure, Provisioner will only ignore the information of
the current node and continue restoring other nodes information.
2020-04-30 11:47:12 +00:00
lly eabf436a23 ble_mesh: Remove some redundant functions 2020-04-30 11:47:12 +00:00
lly 63ab37d721 ble_mesh: Notify unprovisioned device beacon to application layer
With this change, if a Provisioner has provisioned the maximum
number of nodes, it can still report the unprovisioned device
beacon from other nodes to the application layer. And this will
be more reasonable compared with the previous implementation.
Previously when the node array of Provisioner is full, no beacon
from unprovisioned devices will be reported, only some warning
logs will be given.
2020-04-30 11:47:12 +00:00
lly 77cf16e337 ble_mesh: Check if assigned node address is duplicated
Previously only check the node address when it is assigned by the
application layer. Here we also check the address when the address
is allocated internally. And this will be useful when some mesh
internal tests are performed.
2020-04-30 11:47:12 +00:00
lly 80feb4e70a ble_mesh: Update next alloc address when node info is added 2020-04-30 11:47:12 +00:00
lly 9cb7faf4bd ble_mesh: Fix Provisioner provisioning deadlock 2020-04-30 11:47:12 +00:00
lly fecfd754d9 ble_mesh: Remove BLE_MESH_MAX_STORED_NODES option
Previously the BLE_MESH_MAX_STORED_NODES option is added for
internal mesh test, which will be a little confusing for the
users to understand.
Here we remove this option, instead the BLE_MESH_MAX_PROV_NODES
will be used for all the cases. For mesh internal test, when
the test function is called to add some nodes info, the info
will be stored in the array of provisioned nodes directly.
2020-04-30 11:47:12 +00:00
lly dbc44ccc7e ble_mesh: Associate replay protection list size with nodes count
The replay protection list of Provisioner should be at least equal
to the number of nodes with the precondition that each node contains
only one element.
The help information of replay protection list is updated, and the
maximum number of nodes for Provisioner is adjusted based on the
replay protection list size.
2020-04-30 11:47:12 +00:00
lly 6e45c091e3 doc: Fix some ble mesh description 2020-04-30 11:39:07 +00:00
lly d77da91ffb ble_mesh: Add some common macros for sensor model 2020-04-30 11:32:53 +00:00
lly 13817a190c ble_mesh: Allow empty sensor series column value 2020-04-30 11:32:53 +00:00
lly 4e858153a8 ble_mesh: Check if same sensor (settings) property id exists 2020-04-30 11:32:53 +00:00
lly ca95b54ce4 ble_mesh: Allow empty sensor settings exist 2020-04-30 11:32:53 +00:00
lly 9b1b2f9b5d ble_mesh: Support BLE advertising simultaneously 2020-04-30 08:23:24 +00:00
lly caeb040857 ble_mesh: Fix time scene wrong macro name 2020-04-27 16:27:52 +08:00
lly 012b810d29 ble_mesh: Add ble mesh white list test function
Using the ble mesh white list test functions, a node can choose to
only receive mesh messages from a specific node and relay the
messages for it. Messages from other nodes will be ignored.
2020-04-26 06:44:45 +00:00
Jiang Jiang Jian f3f88e241b Merge branch 'bugfix/btdm_backports_v3.3_0328' into 'release/v3.3'
Bugfix/btdm backports v3.3 0328

See merge request espressif/esp-idf!8153
2020-04-16 21:08:10 +08:00
xiewenxiang 23474dc737 component/bt: fix don't dequeue the command queue after process the read_by_type_req(backport v3.3) 2020-03-31 16:45:57 +08:00
baohongde 0ac0a3126f components/coex: Fix wakeup delay with DFS 2020-03-28 21:15:21 +08:00
baohongde 41fe01cc99 components/bt: Fix assert when create conntion cancel 2020-03-28 21:08:52 +08:00
Island 151b6d9bef Merge branch 'bugfix/allow_adv_stop_again_in_host' into 'release/v3.3'
Fix allow to send stop adv hci cmd when host adv state is disable

See merge request espressif/esp-idf!7993
2020-03-17 23:52:04 +08:00
lly cc07e9d203 ble_mesh: Fix ble mesh nimble host deinit 2020-03-17 14:42:46 +08:00
gengyuchao ab175f8845 fix allow to send stop adv hci cmd when host adv state is disable 2020-03-16 21:37:07 +08:00
Jiang Jiang Jian bf568f2eb4 Merge branch 'bugfix/ble_mesh_miscellaneous_fix_v3.3' into 'release/v3.3'
Bugfix/ble mesh miscellaneous fix (v3.3)

See merge request espressif/esp-idf!7971
2020-03-16 13:27:35 +08:00
Jiang Jiang Jian 36cddd0bae Merge branch 'bugfix/ble_mesh_update_3.3' into 'release/v3.3'
Bugfix/ble mesh update 3.3

See merge request espressif/esp-idf!7801
2020-03-16 13:26:44 +08:00
Prasad Alatkar 4fb4c01c53 NimBLE: Add Host based privacy (RPA) feature support (v3.3)
- This feature removes dependency on controller to use privacy (RPA)
2020-03-15 21:43:01 +05:30
Prasad Alatkar 237f7eb92a NimBLE: Fix check for static random address & add MSYS_1 in menuconfig (v3.3) 2020-03-15 21:43:01 +05:30
Hrishikesh Dhayagude 5ca8851be8 NimBLE: Use dynamic buffers instead of static memory (v3.3)
The NimBLE host buffers that consume a significant amount of memory are
now allocated dynamically.
The advantage is that, the memory can be reclaimed in cases where BLE
is turned off and not required for the current boot cycle
2020-03-15 21:43:01 +05:30
Prasad Alatkar b6c88b683f NimBLE: Misc changes in host flow control, ble_gap_unpair, ble_hs_hci_rx_evt & example (v3.3)
- Add menuconfig option for NimBLE host flow control
- Include changes in `blecent` example from upstream PR!702
- add ble_hs_lock in ble_gap_unpair Upstream PR!584
- ble_hs_hci_rx_evt, upstream PR!738
2020-03-15 21:43:01 +05:30
lly a8763e6517 ble_mesh: Move dev_role to the end of model_pub 2020-03-13 19:53:26 +08:00
lly de022501b7 ble_mesh: Use the right netkey during iv update 2020-03-13 19:53:23 +08:00
lly 0d6dd36af9 ble_mesh: Use the right net_idx & app_idx for publish 2020-03-13 19:53:19 +08:00
lly 68dba56ac8 ble_mesh: Check buf->ref before unref the buffer 2020-03-13 19:53:16 +08:00
lly 9f32f4b405 ble_mesh: Fix mesh memory use-after-free issue 2020-03-13 19:53:12 +08:00
lly c19a01d100 ble_mesh: Add ble mesh deinit in btc task 2020-03-13 19:53:08 +08:00
lly 2ae6eedb30 ble_mesh: Free beacon timer when deinit mesh 2020-03-13 19:53:02 +08:00
lly e73ad2c391 ble_mesh: Use lock for mesh timer operations 2020-03-13 19:52:50 +08:00
Mahavir Jain 6babdfc0b7 ipc: prevent code getting pulled in for unicore configuration 2020-03-12 16:28:00 +05:30
Chinmay Chhajed 72fb22ed51 This MR is intended to fix Bluetooth event scheduling when WiFi is also enabled.
The global interrupts will be disabled before taking current
time for scheduling further bluetooth events. Earlier disabling
interrupts was taking some time because of which WiFi events were
interrupting in current bluetooth scheduling.

Also fixes ble crash issue triggered by ble event irq miss (0x20000).
2020-03-05 18:58:28 +05:30
lly 0e2c77b185 ble_mesh: Calc incomplete timeout based on msg info 2020-02-27 15:47:26 +08:00
lly 91ad0f9f4a ble_mesh: Start the timer when starting to send the client message 2020-02-27 15:47:12 +08:00
lly 70eadc0b05 ble_mesh: No timeout for client message to non-unicast address 2020-02-27 15:46:54 +08:00
lly 49fc8c86b3 ble_mesh: Unify client application and lower transport layer timeout 2020-02-27 15:46:19 +08:00
lly 04a6ac3cf5 ble_mesh: Allow maximum 377 octets payload 2020-02-27 15:46:03 +08:00
lly 9fa5c14d58 ble_mesh: Reset transport info when node is removed 2020-02-27 15:45:46 +08:00
lly cc19e1da9b ble_mesh: Provisioner ignores msg from removed node 2020-02-27 15:45:15 +08:00
June 2548168277 backport mr !6031 - fix security info restore bug 2020-02-21 20:17:17 +08:00
Jiang Jiang Jian 7ab0a59bb3 Merge branch 'bugfix/host_and_example_bugfix_backport_to_v3.3' into 'release/v3.3'
Bugfix/host and example bugfix backport to v3.3

See merge request espressif/esp-idf!7723
2020-02-21 18:15:48 +08:00
Jiang Jiang Jian 7d1c44fb7e Merge branch 'bugfix/btdm_role_switch_v3.3' into 'release/v3.3'
Fix bugs about role switch

See merge request espressif/esp-idf!7721
2020-02-21 17:49:46 +08:00
gengyuchao 94255c421d Fix some typo in idf release v3.3 2020-02-20 20:05:10 +08:00
gengyuchao b6e9a15e81 Component/bt :
Add handling of osi memory calloc failure.
Add length check for snprintf in osi config.
2020-02-20 19:39:03 +08:00
gengyuchao 53664c80ff component/bt: Fix the issue with pointer type conversion in gattc. Unified att(db_sizedb_size) count pointer type in bta and btc, change pointer type in bta from int to uint16_t. 2020-02-20 19:16:01 +08:00
baohongde 74b964ed67 Fix bugs about role switch
Jitter in FHS
Jitter in first PULL
Receive EDR packet fail after role switch
2020-02-20 19:11:45 +08:00
gengyuchao 6241139685 example/ble_throughput:
Fixed the throughput wasting memory and packet loss issues.
Fixed the throughput crash bug because of using the Mutex.
2020-02-20 18:05:23 +08:00
gengyuchao 4375e60a6e bugfix: ble add missing gatt descriptors 2020-02-20 17:54:45 +08:00
Jiang Jiang Jian 26383e95fd Merge branch 'feature/esp32_5p0_backport_v3p3' into 'release/v3.3'
backport esp325p0 new features and code optimize to v3.3

See merge request espressif/esp-idf!7564
2020-02-20 17:38:23 +08:00
Jiang Jiang Jian 365092fb57 Merge branch 'bugfix/coex_a2dp_stuck_after_creating_another_connection_v3.3' into 'release/v3.3'
components/coex: Fix a2dp stuck after creating another connection

See merge request espressif/esp-idf!7663
2020-02-20 14:16:53 +08:00
Jiang Jiang Jian 3aa0922221 Merge branch 'bugfix/controller_initializer_order' into 'release/v3.3'
fix initializer order for BT_CONTROLLER_INIT_CONFIG_DEFAULT

See merge request espressif/esp-idf!7623
2020-02-19 17:09:17 +08:00