我按照SimpleLink CC13x2 / CC26x2 SDK BLE5-Stack User's Guide 2.02.01.00中周期广播那节的指导步骤进行外设设备的代码编写,
但主机centor设备无法接收到通过GapAdv_SetPeriodicAdvData函数设置的周期广播数据,但可以接收到GapAdv_loadByHandle设置的数据。附上外设设备配置周期广播部分的代码段如下,各函数返回的status我已经检查过,都返回了SUCCESS
// Periodic Advertising Intervals
#define PERIDIC_ADV_INTERVAL_MIN 160
#define PERIDIC_ADV_INTERVAL_MAX 160
/// Non-Connectable & Non-Scannable advertising set
#define GAPADV_PARAMS_AE_NC_NS { \
.eventProps = 0, \
.primIntMin = 160, \
.primIntMax = 160, \
.primChanMap = GAP_ADV_CHAN_ALL, \
.peerAddrType = PEER_ADDRTYPE_PUBLIC_OR_PUBLIC_ID, \
.peerAddr = { 0x74, 0xD2, 0x85, 0xD4, 0x63, 0xB4 }, \
.filterPolicy = GAP_ADV_WL_POLICY_ANY_REQ, \
.txPower = GAP_ADV_TX_POWER_NO_PREFERENCE, \
.primPhy = GAP_ADV_PRIM_PHY_1_MBPS, \
.secPhy = GAP_ADV_SEC_PHY_1_MBPS, \
.sid = 1 \
}
static uint8 advHandleNCNS; // Non-Connactable & Non-Scannable
static uint8_t periodicData[] =
{
'P',
'e',
'r',
'i',
'o',
'd',
'i',
'c',
'A',
'd',
'v'
};
#define GAPADV_DATA_PERIODIC_ADV { \
.operation = GAPADV_PERIODIC_ADV_DATA_COMPLETE, \
.dataLength = sizeof(periodicData), \
.pData = periodicData \
}
// Advertisement data
static uint8_t advertData[] =
{
0x0C, // Length of this data
GAP_ADTYPE_LOCAL_NAME_SHORT, // Type of this data
'P',
'e',
'r',
'i',
'o',
'd',
'i',
'c',
'A',
'd',
'v',
0x02, // length of this data
GAP_ADTYPE_FLAGS,
GAP_ADTYPE_FLAGS_GENERAL | GAP_ADTYPE_FLAGS_BREDR_NOT_SUPPORTED,
};
// Create non connectable & non scannable advertising set #3
GapAdv_params_t advParamNonConn = GAPADV_PARAMS_AE_NC_NS;
// Create Advertisement set #3 and assign handle
status = GapAdv_create(&SimplePeripheral_advCallback, &advParamNonConn, &advHandleNCNS);
// Load advertising data for set #3 that is statically allocated by the app
status = GapAdv_loadByHandle(advHandleNCNS, GAP_ADV_DATA_TYPE_ADV,
sizeof(advertData), advertData);
// Set event mask for set #3
status = GapAdv_setEventMask(advHandleNCNS,
GAP_ADV_EVT_MASK_START_AFTER_ENABLE |
GAP_ADV_EVT_MASK_END_AFTER_DISABLE |
GAP_ADV_EVT_MASK_SET_TERMINATED);
// Enable non connectable & non scannable advertising for set #3
status = GapAdv_enable(advHandleNCNS, GAP_ADV_ENABLE_OPTIONS_USE_MAX , 0);
// Set Periodic Advertising parameters
GapAdv_periodicAdvParams_t perParams = {PERIDIC_ADV_INTERVAL_MIN,
PERIDIC_ADV_INTERVAL_MAX, 0x40};
status = GapAdv_SetPeriodicAdvParams(advHandleNCNS, &perParams);
GapAdv_periodicAdvData_t periodicDataParams = GAPADV_DATA_PERIODIC_ADV;
status = GapAdv_SetPeriodicAdvData(advHandleNCNS, &periodicDataParams);
// Enable the periodic advertising
status = GapAdv_SetPeriodicAdvEnable(1, advHandleNCNS);
经过在论坛搜索,我找到了之前的一个帖子[参考译文] LAUNCHXL-CC26X2R1:BTool 中发送周期性广播包的正确方法是什么? - Bluetooth®︎(参考译文帖)(Read Only) - Bluetooth®︎(参考译文帖) - E2E 设计支持 (ti.com),问题描述与我目前的现象基本一样,目前我仍没有找到问题原因和解决方法。