TI中文支持网
TI专业的中文技术问题搜集分享网站

Fast Advertising & Slow Advertising

CC2540的Timeapp例子中区分了2种不同的advertising:

Fast

广播间隔:30ms

广播持续时间:30s

Slow

广播间隔:1s

广播持续时间:永久

我在使用这两种广播模式时发现有2个问题:

1、采用Slow advertising,iphone能够搜索到蓝牙开发板,但是配对时总是超时,导致只能使用Fast模式进行;

2、Fast模式修改广播持续时间为永久,无法生效,实际广播时间只有几秒,之后手机就搜不到开发板了;

大家有没有遇到这样的问题呢,一起讨论下吧!

Yan:

大家有没有遇到这样问题呢?

Yan:

cai,

把你的代码贴出来给大家看看?

另外,iPhone用的啥app?

cai alex:

回复 Yan:

没用app,直接手机搜到然后进行连接的;

// Fast advertising interval in 625us units#define DEFAULT_FAST_ADV_INTERVAL 32

// Duration of fast advertising duration in ms#define DEFAULT_FAST_ADV_DURATION 30000

// Slow advertising interval in 625us units#define DEFAULT_SLOW_ADV_INTERVAL 1600

// Duration of slow advertising duration in ms (set to 0 for continuous advertising)#define DEFAULT_SLOW_ADV_DURATION 0

static void startAdvertising(uint8 mode){ uint8 advState = TRUE;

if ( mode == ADV_FAST ) { //快速广播 GAP_SetParamValue( TGAP_GEN_DISC_ADV_INT_MIN, DEFAULT_FAST_ADV_INTERVAL ); GAP_SetParamValue( TGAP_GEN_DISC_ADV_INT_MAX, DEFAULT_FAST_ADV_INTERVAL ); GAP_SetParamValue( TGAP_GEN_DISC_ADV_MIN, DEFAULT_FAST_ADV_DURATION );

} else { //慢速广播 GAP_SetParamValue( TGAP_GEN_DISC_ADV_INT_MIN, DEFAULT_SLOW_ADV_INTERVAL ); GAP_SetParamValue( TGAP_GEN_DISC_ADV_INT_MAX, DEFAULT_SLOW_ADV_INTERVAL ); GAP_SetParamValue( TGAP_GEN_DISC_ADV_MIN, DEFAULT_SLOW_ADV_DURATION );

}

// Enable advertising GAPRole_SetParameter( GAPROLE_ADVERT_ENABLED, sizeof( uint8 ), &advState );}

Yan:

回复 cai alex:

cai,

huh,很奇怪。代码看不出什么问题。

你能用packet sniffer抓包看一下吗?广播的时候和发起连接的时候到底发生了什么。

空中抓包往往能看出很多东西。

另外,你怎么调用你的 startAdvertising()的?

cai alex:

回复 Yan:

调用的时机有以下几个:

1、初始化时调用startAdvertising(ADV_FAST);进入快速广播状态;

2、在gapStateCallback()的以下case进行调用:

if ( timeAppGapState == GAPROLE_CONNECTED &&newState != GAPROLE_CONNECTED ){DEBUG_PRINT("Disconnected , newState : %d \r\n", newState);disconnected();if ( newState == GAPROLE_WAITING_AFTER_TIMEOUT ){//这个应该是连接超时(距离太远,蓝牙关闭)造成的,采用慢速广播startAdvertising(ADV_SLOW);}else{//这个应该是手机端主动断开造成的,采用快速广播startAdvertising(ADV_FAST);}}// if advertising stoppedelse if ( timeAppGapState == GAPROLE_ADVERTISING &&newState == GAPROLE_WAITING ){DEBUG_PRINT("Advertising stopped\r\n");// if fast advertising switch to slowif ( GAP_GetParamValue( TGAP_GEN_DISC_ADV_INT_MIN ) == DEFAULT_FAST_ADV_INTERVAL ){startAdvertising(ADV_SLOW);}}

抓包的话我回头试试,现在手头边暂时没有设备。

另外我调整了一下2种广播模式的设置值,现在上面的代码能在各种情况下自动广播和进行配对,但是有时候要多试几次才能配对成功:

#define DEFAULT_FAST_ADV_INTERVAL 320 //def: 32

#define DEFAULT_FAST_ADV_DURATION 0 //def: 30000

#define DEFAULT_SLOW_ADV_INTERVAL 800 //def: 1600

#define DEFAULT_SLOW_ADV_DURATION 0 //def: 0

赞(0)
未经允许不得转载:TI中文支持网 » Fast Advertising & Slow Advertising
分享到: 更多 (0)