From fe92ba7e68d80cc8a00bb48ae21a5c3573534910 Mon Sep 17 00:00:00 2001 From: zhaohe Date: Fri, 9 Feb 2024 03:17:05 +0800 Subject: [PATCH] change name scaner to name fuzzy scaner --- components/ble/common/ble_advdata.c | 55 +++++++++++++++++++++++++++++++++++++ components/ble/common/ble_advdata.h | 4 ++- 2 files changed, 58 insertions(+), 1 deletion(-) diff --git a/components/ble/common/ble_advdata.c b/components/ble/common/ble_advdata.c index 211d8ef..6b7e5e5 100644 --- a/components/ble/common/ble_advdata.c +++ b/components/ble/common/ble_advdata.c @@ -703,6 +703,61 @@ bool ble_advdata_name_find(uint8_t const * p_encoded_data, return false; } +bool str_fuzzy_find(const char * target_name,const char* name,int namelen) +{ + if (name == NULL || target_name == NULL) + { + return false; + } + int len = namelen; + int target_len = strlen(target_name); + if (len < target_len) + { + return false; + } + for (int i = 0; i < len - target_len + 1; i++) + { + if (memcmp(name + i, target_name, target_len) == 0) + { + return true; + } + } + return false; + +} + +bool ble_advdata_name_fuzzy_find(uint8_t const * p_encoded_data, + uint16_t data_len, + char const * p_target_name) +{ + uint16_t parsed_name_len; + uint8_t const * p_parsed_name; + uint16_t data_offset = 0; + + if (p_target_name == NULL) + { + return false; + } + + + parsed_name_len = ble_advdata_search(p_encoded_data, + data_len, + &data_offset, + BLE_GAP_AD_TYPE_COMPLETE_LOCAL_NAME); + + p_parsed_name = &p_encoded_data[data_offset]; + + if ( (data_offset != 0) + && (parsed_name_len != 0) + && (str_fuzzy_find(p_target_name,p_parsed_name,parsed_name_len))) + { + return true; + } + + return false; +} + + bool ble_advdata_short_name_find(uint8_t const * p_encoded_data, uint16_t data_len, diff --git a/components/ble/common/ble_advdata.h b/components/ble/common/ble_advdata.h index a254974..3f4c837 100644 --- a/components/ble/common/ble_advdata.h +++ b/components/ble/common/ble_advdata.h @@ -263,7 +263,9 @@ uint8_t * ble_advdata_parse(uint8_t * p_encoded_data, bool ble_advdata_name_find(uint8_t const * p_encoded_data, uint16_t data_len, char const * p_target_name); - +bool ble_advdata_name_fuzzy_find(uint8_t const * p_encoded_data, + uint16_t data_len, + char const * p_target_name) /**@brief Function for searching through encoded Advertising data for a device shortened name. *