Merge branch 'optimize/ble_mesh_provisioner_delete_dev' into 'master'

ble_mesh: stack: Optimize Provisioner delete device function

See merge request espressif/esp-idf!10557
This commit is contained in:
Island 2020-09-25 11:52:31 +08:00
commit 87bc33f7df
3 changed files with 7 additions and 25 deletions

View File

@ -263,12 +263,11 @@ esp_err_t esp_ble_mesh_provisioner_prov_device_with_addr(const uint8_t uuid[16],
uint16_t oob_info, uint16_t unicast_addr); uint16_t oob_info, uint16_t unicast_addr);
/** /**
* @brief Delete device from queue, reset current provisioning link and reset the node. * @brief Delete device from queue, and reset current provisioning link with the device.
* *
* @note If the device is in the queue, remove it from the queue; if the device is being * @note If the device is in the queue, remove it from the queue; if the device is
* provisioned, terminate the provisioning procedure; if the device has already * being provisioned, terminate the provisioning procedure. Either one of the
* been provisioned, reset the device. And either one of the addr or device UUID * device address or device UUID can be used as input.
* can be input.
* *
* @param[in] del_dev: Pointer to a struct containing the device information. * @param[in] del_dev: Pointer to a struct containing the device information.
* *

View File

@ -829,7 +829,7 @@ typedef enum {
ESP_BLE_MESH_PROVISIONER_PROV_COMPLETE_EVT, /*!< Provisioner provisioning done event */ ESP_BLE_MESH_PROVISIONER_PROV_COMPLETE_EVT, /*!< Provisioner provisioning done event */
ESP_BLE_MESH_PROVISIONER_ADD_UNPROV_DEV_COMP_EVT, /*!< Provisioner add a device to the list which contains devices that are waiting/going to be provisioned completion event */ ESP_BLE_MESH_PROVISIONER_ADD_UNPROV_DEV_COMP_EVT, /*!< Provisioner add a device to the list which contains devices that are waiting/going to be provisioned completion event */
ESP_BLE_MESH_PROVISIONER_PROV_DEV_WITH_ADDR_COMP_EVT, /*!< Provisioner start to provision an unprovisioned device completion event */ ESP_BLE_MESH_PROVISIONER_PROV_DEV_WITH_ADDR_COMP_EVT, /*!< Provisioner start to provision an unprovisioned device completion event */
ESP_BLE_MESH_PROVISIONER_DELETE_DEV_COMP_EVT, /*!< Provisioner delete a device from the list, close provisioning link with the device if it exists and remove the device from network completion event */ ESP_BLE_MESH_PROVISIONER_DELETE_DEV_COMP_EVT, /*!< Provisioner delete a device from the list, close provisioning link with the device completion event */
ESP_BLE_MESH_PROVISIONER_SET_DEV_UUID_MATCH_COMP_EVT, /*!< Provisioner set the value to be compared with part of the unprovisioned device UUID completion event */ ESP_BLE_MESH_PROVISIONER_SET_DEV_UUID_MATCH_COMP_EVT, /*!< Provisioner set the value to be compared with part of the unprovisioned device UUID completion event */
ESP_BLE_MESH_PROVISIONER_SET_PROV_DATA_INFO_COMP_EVT, /*!< Provisioner set net_idx/flags/iv_index used for provisioning completion event */ ESP_BLE_MESH_PROVISIONER_SET_PROV_DATA_INFO_COMP_EVT, /*!< Provisioner set net_idx/flags/iv_index used for provisioning completion event */
ESP_BLE_MESH_PROVISIONER_SET_STATIC_OOB_VALUE_COMP_EVT, /*!< Provisioner set static oob value used for provisioning completion event */ ESP_BLE_MESH_PROVISIONER_SET_STATIC_OOB_VALUE_COMP_EVT, /*!< Provisioner set static oob value used for provisioning completion event */

View File

@ -1001,18 +1001,10 @@ int bt_mesh_provisioner_prov_device_with_addr(const u8_t uuid[16], const u8_t ad
int bt_mesh_provisioner_delete_device(struct bt_mesh_device_delete *del_dev) int bt_mesh_provisioner_delete_device(struct bt_mesh_device_delete *del_dev)
{ {
/**
* Three Situations:
* 1. device is not being/been provisioned, just remove from device queue.
* 2. device is being provisioned, need to close link & remove from device queue.
* 3. device is been provisioned, need to send config_node_reset and may need to
* remove from device queue. config _node_reset can be added in function
* provisioner_reset_node() in provisioner_main.c.
*/
bt_mesh_addr_t del_addr = {0}; bt_mesh_addr_t del_addr = {0};
u8_t zero[16] = {0};
bool addr_match = false; bool addr_match = false;
bool uuid_match = false; bool uuid_match = false;
u8_t zero[16] = {0};
int addr_cmp = 0; int addr_cmp = 0;
int uuid_cmp = 0; int uuid_cmp = 0;
u16_t i = 0U; u16_t i = 0U;
@ -1046,7 +1038,7 @@ int bt_mesh_provisioner_delete_device(struct bt_mesh_device_delete *del_dev)
for (i = 0U; i < ARRAY_SIZE(link); i++) { for (i = 0U; i < ARRAY_SIZE(link); i++) {
if (addr_cmp && (del_dev->addr_type <= BLE_MESH_ADDR_RANDOM)) { if (addr_cmp && (del_dev->addr_type <= BLE_MESH_ADDR_RANDOM)) {
if (!memcmp(link[i].addr.val, del_dev->addr, BLE_MESH_ADDR_LEN) && if (!memcmp(link[i].addr.val, del_dev->addr, BLE_MESH_ADDR_LEN) &&
link[i].addr.type == del_dev->addr_type) { link[i].addr.type == del_dev->addr_type) {
addr_match = true; addr_match = true;
} }
} }
@ -1061,15 +1053,6 @@ int bt_mesh_provisioner_delete_device(struct bt_mesh_device_delete *del_dev)
} }
} }
/* Third: find if the device is been provisioned */
if (addr_cmp && (del_dev->addr_type <= BLE_MESH_ADDR_RANDOM)) {
bt_mesh_provisioner_delete_node_with_dev_addr(&del_addr);
}
if (uuid_cmp) {
bt_mesh_provisioner_delete_node_with_uuid(del_dev->uuid);
}
return 0; return 0;
} }