Commit Graph

303 Commits

Author SHA1 Message Date
lly
62458dbb90 ble_mesh: stack: Update client model msg send 2020-08-31 17:33:08 +08:00
lly
5704b13bc9 ble_mesh: stack: Fix recv health current status incorrectly 2020-08-31 13:57:12 +08:00
lly
c3b300064b ble_mesh: stack: Only keep func pointer for very common log
Currently only keep func pointer for the followings:
- Invalid parameter (mesh btc & mesh stack)
- Out of memory (mesh btc & mesh stack)
- Unknown act (mesh btc)
- Invalid model user data (mesh stack)
- BT_DBG("%s", __func__) (mesh btc & mesh stack)
- A few other specific situations (buf ref debug, send status check)
2020-08-31 11:23:35 +08:00
lly
bbd9a8a44d ble_mesh: stack: Make proxy server & client functions clear 2020-08-31 11:23:34 +08:00
lly
72ce618f9a ble_mesh: stack: Add proxy cfg pdu length check 2020-08-28 17:45:09 +08:00
lly
36dc7ae71e ble_mesh: stack: Rework using dev flag to check scan status
Different bluetooth host has different behaviors, so it's better
to maintain a scan check mechanism of BLE Mesh itself.
Fixes an issue when only PB-GATT is enabled for node, which will
output a scan error log when the device is provisioned.
2020-08-28 17:45:08 +08:00
lly
7b57311a0e ble_mesh: stack: Add more checks about input prov bearers 2020-08-28 17:45:07 +08:00
lly
ad412850d0 ble_mesh: stack: Rename mesh adv queue and relay queue 2020-08-28 06:07:17 +00:00
lly
20d33f27d6 ble_mesh: stack: Use macros for adv task name & prio 2020-08-28 06:07:17 +00:00
lly
84012fa82f ble_mesh: stack: Make freertos static allocation visible 2020-08-28 06:07:17 +00:00
lly
ffcd55bbf2 ble_mesh: stack: Update option of using DRAM/SPIRAM for memory allocation 2020-08-28 06:07:17 +00:00
Island
e1e082072c Merge branch 'bugfix/ble_mesh_fast_prov_misc_update_v4.1' into 'release/v4.1'
Bugfix/ble mesh fast prov misc update (v4.1)

See merge request espressif/esp-idf!9465
2020-08-28 14:03:10 +08:00
Island
0cc8639e2f Merge branch 'bugfix/ble_mesh_update_send_ttl_v4.1' into 'release/v4.1'
Bugfix/ble mesh update send ttl (v4.1)

See merge request espressif/esp-idf!10159
2020-08-28 10:43:43 +08:00
lly
ce4a8af3c7 ble_mesh: stack: Update some fast prov functions 2020-08-27 14:36:58 +00:00
lly
e3a7fb2fd4 ble_mesh: stack: Move fast prov functions to a single file 2020-08-27 14:36:58 +00:00
lly
50fc403018 ble_mesh: Mark platform related default RNG as 0 2020-08-27 10:57:51 +00:00
lly
0b65005ffd ble_mesh: Remove the previously added redundant aes files 2020-08-27 10:57:51 +00:00
lly
d90f3f9119 ble_mesh: Update tinycrypt header file include guards
Add BLE_MESH in the macro to make it specific for BLE Mesh.
2020-08-27 10:57:51 +00:00
lly
7d40d308bb ble_mesh: Format source and header files of tinycrypt 2020-08-27 10:57:51 +00:00
lly
0dda8869cd ble_mesh: Port full implementation of tinycrypt [Zephyr]
- Original code is here: https://github.com/zephyrproject-rtos/tinycrypt
- Also this fixes the compile error when NimBLE and ESP BLE Mesh
  both uses the tinycrypt.
2020-08-27 10:57:51 +00:00
Island
8a0ae62a03 Merge branch 'bugfix/ble_mesh_compile_error_v4.1' into 'release/v4.1'
Bugfix/ble mesh proxy compile error (v4.1)

See merge request espressif/esp-idf!9431
2020-08-27 18:03:01 +08:00
lly
8988fb9b8d ble_mesh: Config and health client btc fixes
Fix an issue which may cause no error code is returned
when sending config client or health client messages
with invalid parameters.
2020-08-26 08:28:12 +00:00
lly
bd187b022f ble_mesh: Add more checks of net_idx & app_idx 2020-08-26 08:28:12 +00:00
lly
7ba69e5439 ble_mesh: Optimize some send & recv logs 2020-08-26 08:28:12 +00:00
lly
75af20e687 ble_mesh: stack: Add two application macros for TTL 2020-08-26 16:12:26 +08:00
lly
5952694160 ble_mesh: stack: Update send_ttl in btc when recv a msg
Update send_ttl mainly for server models. When a server model
receives a message, and the status is required to be replied
by the application, we need to set send_ttl to the msg context.
If send_ttl is not updated in btc, and the applcation does not
set the TTL either, then the status will be replied with TTL=0,
which may cause the client side (e.g. the phone App) failed to
receive the status.

Closes https://github.com/espressif/esp-idf/issues/5300
2020-08-26 16:12:26 +08:00
Island
e40e694cf9 Merge branch 'bugfix/ble_mesh_set_recv_rssi_v4.1' into 'release/v4.1'
Bugfix/ble mesh set recv rssi (v4.1)

See merge request espressif/esp-idf!9400
2020-08-26 15:56:02 +08:00
lly
45f7edd4f2 ble_mesh: stack: Fix compile error when only proxy enabled
Also remove some redundant CONFIG_BLE_MESH_PROXY checks, because
when the following options are satisfied, the CONFIG_BLE_MESH_PROXY
option will be selected mandatorily.
2020-08-26 07:50:10 +00:00
lly
292333a27c ble_mesh: Get node info with pre-configured node name
Also add a function to get the entry of the nodes table.

Closes https://github.com/espressif/esp-idf/issues/5397
2020-08-25 09:35:34 +08:00
lly
bd59c89540 ble_mesh: stack: Copy recv_rssi for other received messages
Follow the commit: 2b80cb6883,
copy the recv_rssi for other mesh messages.
2020-08-24 08:52:05 +00:00
mbroek
c3fe42250c When a generic mesh model message is received "bt_mesh_generic_server_cb_evt_to_btc" copies the
ctx values to cb_params for the mesh stack.

recv_rssi was not copied.

This means the rssi could not be read when receiving generic server messages using ble_mesh.
2020-08-24 08:52:05 +00:00
lly
3d888ca777 ble_mesh: Check if subnet exists before updating beacon_sent
- Before updating the "beacon_sent" of a subnet, we need to check
  if the subnet still exists, especially for a Provisioner.
- Fix a bug which will cause Provisioner failed to send Secure
  Network Beacon if no device is provisioned
2020-08-21 12:58:34 +00:00
Island
2a5679c253 Merge branch 'bugfix/ble_mesh_model_recv_fix_v4.1' into 'release/v4.1'
Bugfix/ble mesh model recv fix (v4.1)

See merge request espressif/esp-idf!9007
2020-08-21 20:37:53 +08:00
lly
9ba5899206 ble_mesh: correct the return type [Zephyr] 2020-08-21 07:21:15 +00:00
lly
6b6cf151cf ble_mesh: Add net_buf_simple_init_with_data [Zephyr] 2020-08-21 07:21:15 +00:00
lly
897acd6a1d ble_mesh: Optimize model recv operations [Zephyr]
Previously the model recv operation is a littl fuzzy.
With the changes, the model recv operation is splitted into:
- find op
- check app_idx
- check dst
- check length
- update info & handle message
2020-08-21 07:21:15 +00:00
lly
cc36e415c0 ble_mesh: Local model (un)subscribes group address 2020-08-21 07:18:44 +00:00
lly
a43e5feee8 ble_mesh: Define a macro for invalid company id 2020-08-21 07:18:44 +00:00
Island
ab6139b9df Merge branch 'bugfix/ble_mesh_check_model_status_v4.1' into 'release/v4.1'
ble_mesh: stack: Check model status with variable length (v4.1)

See merge request espressif/esp-idf!9399
2020-08-21 14:57:03 +08:00
Island
6e42afb45b Merge branch 'bugfix/ble_mesh_not_define_bool_v4.1' into 'release/v4.1'
Bugfix/ble mesh not define bool (v4.1)

See merge request espressif/esp-idf!9394
2020-08-21 14:56:46 +08:00
Island
252aaf2ab7 Merge branch 'bugfix/ble_mesh_bt_hex_v4.1' into 'release/v4.1'
ble_mesh: Fix wrong log output with bt_hex (v4.1)

See merge request espressif/esp-idf!9393
2020-08-21 14:56:34 +08:00
Island
9ff30e81c5 Merge branch 'bugfix/ble_mesh_remove_relay_dependency_v4.1' into 'release/v4.1'
ble_mesh: Remove relay option dependency (v4.1)

See merge request espressif/esp-idf!9026
2020-08-21 14:56:23 +08:00
lly
7f7397e67f ble_mesh: Remove relay option dependency
When the relay functionality of a node is not enabled, this
issue will cause the node failing to send messages to fixed
group.
2020-07-30 03:58:27 +00:00
lly
bf35465658 ble_mesh: stack: Check model status with variable length 2020-06-30 09:31:27 +08:00
lly
289b8bcea7 ble_mesh: Remove boolean type definitions 2020-06-30 09:18:42 +08:00
Nikolaos Strikos
0d5eb50ce2 ble_mesh: Do not #define bool when compiling in C++ 2020-06-30 09:18:42 +08:00
lly
353f893d95 ble_mesh: Fix wrong log output with bt_hex
- This issue was introduced in the commit: a788e7cd3d
  which updated the bt_hex() function incorrectly.
- And in bt_hex(), we use 2 for the two-dimensional array, because currently
  at most two bt_hex() will be used at the same time. Also this will save
  some DRAM compared with using 4.
2020-06-30 09:16:29 +08:00
lly
1bd7944316 ble_mesh: Rework prov pdu length check 2020-06-02 10:13:51 +08:00
lly
0c87b1c12d ble_mesh: Check the result of creating timer 2020-05-28 10:27:06 +08:00
Island
5ea193115b Merge branch 'bugfix/ble_mesh_sync_zephyr_fixes_v4.1' into 'release/v4.1'
Bugfix/ble mesh sync zephyr fixes (v4.1)

See merge request espressif/esp-idf!8948
2020-05-28 10:15:53 +08:00
Island
6971cdbad5 Merge branch 'bugfix/ble_mesh_not_use_same_private_key_v4.1' into 'release/v4.1'
ble_mesh: Not using pre-initialized private key (v4.1)

See merge request espressif/esp-idf!8945
2020-05-28 10:14:21 +08:00
lly
2f73d76768 ble_mesh: Transport tx fields overflow [Zephyr]
The transport segmented TX nack and seg_pending fields must be at least
6 bits to avoid overflow for 32 segment messages. This change rearranges
the seg_tx fields to gather all state flag fields in one byte, while
making the counter fields whole bytes.
2020-05-27 17:46:29 +08:00
lly
63c8dd2981 ble_mesh: Friend with unknown appkey [Zephyr]
Ensures that friend messages are enqueued, even if the packet is
received with an appkey is unknown to the friend. Previously, sdu_recv
would return EINVAL if the appkey was unknown, which would prevent the
lower transport layer from adding the packet to the friend queue. This
is irrelevant for the logic in lower transport, and should not be
returned as an error.
2020-05-27 17:46:23 +08:00
lly
0c06be9bcd ble_mesh: Not using pre-initialized private key 2020-05-27 17:39:50 +08:00
lly
d3921346a9 ble_mesh: Same func for storing/restoring comp data 2020-05-27 17:30:31 +08:00
lly
3b89497b39 ble_mesh: Fix using old config for duplicate scan 2020-05-25 16:53:30 +08:00
lly
eeff638c97 ble_mesh: Fix Provisioner failed to publish 2020-05-22 15:47:40 +08:00
Island
502a2aed2a Merge branch 'bugfix/ble_mesh_friend_init_flag_v4.1' into 'release/v4.1'
Bugfix/ble mesh friend init flag (v4.1)

See merge request espressif/esp-idf!8848
2020-05-22 10:51:13 +08:00
Island
e789d85e69 Merge branch 'bugfix/ble_mesh_node_old_version_to_new_v4.1' into 'release/v4.1'
ble_mesh: Fix mesh node device role restore (v4.1)

See merge request espressif/esp-idf!8724
2020-05-21 15:10:48 +08:00
Island
eb8f6f942a Merge branch 'bugfix/ble_mesh_fix_typos_v4.1' into 'release/v4.1'
ble_mesh: Fix typos (v4.1)

See merge request espressif/esp-idf!8726
2020-05-21 15:10:10 +08:00
lly
715cb64288 ble_mesh: Clear two more vars during proxy server deinit 2020-05-21 14:26:05 +08:00
lly
52fa4c7f96 ble_mesh: Add missing sdkconfig.h 2020-05-21 14:26:05 +08:00
lly
f02d095ff1 ble_mesh: Init device name during proxy server init
Device name will be reset when deinit mesh stack. If not
initializing device name during the next mesh stack init,
it will fail to set the device name when using bluedroid.
2020-05-21 14:26:04 +08:00
lly
ab73b3fd8e ble_mesh: Add init flag for friend init/deinit
Since bt_mesh_friend_init() will only be invoked when
a device is provisioned or Provisioner is enabled, so
we add a flag to indicate if the friend functionality
is initialized in case deinit before initialization.
2020-05-21 14:26:04 +08:00
lly
9d587eb8fd ble_mesh: Remove patch for the bug of an App 2020-05-15 20:23:48 +08:00
lly
b929611d5d ble_mesh: Fix typos 2020-05-13 18:30:52 +08:00
lly
e9f64eb1c3 ble_mesh: Fix mesh node device role restore
Old version of BLE Mesh has no device role storage, because
previously we only support storing mesh node info.
If the binary of the node is upgraded from old version to a
new version (support storing provisioner info), the mesh info
of the node will not be restored because mesh role does not
exist in the flash.
2020-05-13 18:25:53 +08:00
Island
56c1646e2a Merge branch 'bugfix/sync_zephyr_bt_mesh_bugfix_v4.1' into 'release/v4.1'
Bugfix/sync zephyr bt mesh bugfix (v4.1)

See merge request espressif/esp-idf!8688
2020-05-13 18:15:37 +08:00
lly
31b164ccb1 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:09:04 +08:00
lly
295a9eea82 ble_mesh: Fix not update prov addr in fast prov
When using fast provisioning, the Provisioner functionality
will be enabled. Unicast addresses within the pre-allocated
range will be used for provisioning nodes. And during the
address assignment, the allocated unicast address will be
checked that if it's duplicated with other nodes addresses
and the Provisioner's own addresses.
So before starting using fast provisioning, we need to update
the Provisioner address.
2020-05-11 15:42:58 +08:00
lly
06d445759a ble_mesh: net_key_status only pull one key idx [Zephyr]
Fixes bug where the config client's net_key_status handler would attempt
to pull two key indexes from a message which only holds one.
2020-05-11 15:42:57 +08:00
lly
b1efdd5eb1 ble_mesh: Update client message timeout calculation
Since the behavior of sending segmented messages has been
changed properly, the calculation of timeout value which
will be used when sending an acknowledged message by a
client model also needs to be updated.
2020-05-11 15:42:57 +08:00
lly
42ccb7277f ble_mesh: Add lock for segmented msg operations
Add mutex to protect some variables of the mesh segmented
messages.
Currently the timeout handler of mesh will be executed in
the btc task, while the received mesh messages will be
handled in the btu task. In case some variables are set to
NULL when handled in the btu task, meanwhile these variables
are also accessed in the timeout handler, so we add mutex to
protect these variables and related operations.
2020-05-11 15:42:57 +08:00
lly
cffbc32253 ble_mesh: Fix dereferencing pointer before checking for NULL [Zephyr]
The publication context is checked for NULL in bt_mesh_model_publish()
however it was dereferenced before that. Move the assignment to
ctx.send_rel to the same place where other ctx members are set.
2020-05-11 15:42:56 +08:00
lly
8f5564af84 ble_mesh: Optimize some mesh log output 2020-05-11 15:42:56 +08:00
lly
6a6bac2c62 ble_mesh: Fix restore when revoke keys [Zephyr]
Store keys (NetKey and AppKey) again after revoking.
2020-05-11 15:42:55 +08:00
lly
526f253b2e 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-11 15:42:55 +08:00
lly
2f40c4449f ble_mesh: Split mesh os related into a separate file 2020-05-11 15:42:54 +08:00
lly
8ab29292ab ble_mesh: Split mesh mutex into a separate file 2020-05-11 15:42:54 +08:00
lly
9af8947e55 ble_mesh: Rename mesh_kernel.* to mesh_timer.* 2020-05-11 15:42:53 +08:00
lly
800cb0fff8 ble_mesh: Add and use transport macro definitions [Zephyr] 2020-05-11 15:42:53 +08:00
lly
362e8e0a1f 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-11 15:42:52 +08:00
lly
de648753b0 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-11 15:42:52 +08:00
lly
aed5dc63b7 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-11 15:42:51 +08:00
lly
21c5be311c 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-11 15:42:51 +08:00
lly
0a41241e10 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-11 15:42:50 +08:00
lly
e3472c1c99 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-11 15:42:50 +08:00
lly
175109d196 ble_mesh: Add PRIu64 & PRIx64 in mesh_types.h 2020-05-11 15:42:49 +08:00
lly
61d376109c ble_mesh: Add push functions for supported bit-variants [Zephyr]
Add push functions for bit-widths supported by add and pull functions.
2020-05-11 15:42:49 +08:00
lly
fd4b6fd47e ble_mesh: Add support for 64 bit data type [Zephyr]
This enables pulling and pushing values in 64 bit format.
2020-05-11 15:42:48 +08:00
lly
b348b55d1e ble_mesh: Add support for 48 bit data type [Zephyr]
This enables pulling and pushing values in 48 bit format.
2020-05-11 15:42:48 +08:00
lly
82a5b05948 ble_mesh: Add 48 bit variants [Zephyr]
This adds sys_*_*48 functions that operation on a 48 bits values.
2020-05-11 15:42:46 +08:00
lly
95718d9ef9 ble_mesh: Add support for 24 bit data type [Zephyr]
This enables pulling and pushing values in 24 bit format.
2020-05-11 15:42:46 +08:00
lly
33c0ddce40 ble_mesh: Add 24 bit variants [Zephyr]
This adds sys_*_*24 functions that operation on a 24 bits values.
2020-05-11 15:42:45 +08:00
lly
bf4b513e83 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-11 15:42:45 +08:00
lly
91fff8c897 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-11 15:42:45 +08:00
lly
7ea60199a6 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-11 15:42:44 +08:00
lly
2b84b673bf 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-11 15:42:44 +08:00
lly
c2e24e306f ble_mesh: Check device uuid when init provisioning 2020-05-11 15:42:43 +08:00
lly
a85459e245 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-11 15:42:43 +08:00