出现这种情况可能是因为MCU DA14585上的BLE应用外设代码在广播数据包中没有正确配置广播名称或UUID。iOS设备对广播数据包的解析要求比较严格,必须符合BLE规范才会正常扫描到外设。
以下是一个示例代码,演示如何在MCU DA14585上正确配置广播名称和UUID:
#include "gap.h"
#include "gapm_task.h"
#define APP_DEVICE_NAME "MyDevice"
#define APP_ADV_DATA_LEN 3
// 设置广播数据包
static const struct gapm_start_advertise_cmd adv_data =
{
.op.addr_src = GAPM_STATIC_ADDR,
.intv_min = BLE_CONN_INTV_MIN,
.intv_max = BLE_CONN_INTV_MAX,
.channel_map = GAP_ADV_ALL_CHNLS,
.info.host.mode = GAP_GEN_DISCOVERABLE,
.info.host.adv_filt_policy = ADV_ALLOW_SCAN_ANY_CON_ANY,
.info.host.adv_data_len = APP_ADV_DATA_LEN,
.info.host.scan_rsp_data_len = 0,
.info.host.adv_data = {0x02, GAP_AD_TYPE_FLAGS, GAP_BR_EDR_NOT_SUPPORTED,
0x0F, GAP_AD_TYPE_16_BIT_MORE, 0x18, 0x0A, 0x18, 0x0B,
0x18, 0x0C, GAP_AD_TYPE_NAME_SHORT, 'M', 'y', 'D', 'e', 'v', 'i', 'c', 'e'},
.info.host.scan_rsp_data = {0}
};
// 启动广播
void start_advertising(void)
{
// 设置设备名称
memcpy(&adv_data.info.host.adv_data[14], APP_DEVICE_NAME, strlen(APP_DEVICE_NAME));
// 启动广播
gapm_start_advertise_cmd(&adv_data);
}
在上面的示例代码中,我们首先定义了一个广播数据包 adv_data
,其中包括了广播间隔、广播模式、广播数据等信息。在设置设备名称时,我们将 APP_DEVICE_NAME
拷贝到广播数据包的相应位置。然后调用 gapm_start_advertise_cmd
函数启动广播。
通过正确配置广播名称和UUID,iOS设备就能正常扫描到MCU DA14585上的BLE应用外设了。