cc2541+cc2591 停止廣播
时间:10-02
整理:3721RD
点击:
硬體: cc2541+cc2591
使用一段時間後(1小時內~12小時以上都有遇過),
發現sniffer和手機都掃描不到cc2541,
當cc2541停止廣播時,
用Debugger查看gapRoleState是GAPROLE_ADVERTISING
此時卻可以用長按按鈕來觸發LED閃爍(做法是中斷+osal timer)
reset或者斷電重啟後, 即可恢復廣播
廣播相關的代碼如下,
#define DEFAULT_ADVERTISING_INTERVAL_MIN 32 // 20ms #define DEFAULT_ADVERTISING_INTERVAL_MAX 48 // 30ms #define DEFAULT_DISCOVERABLE_MODE GAP_ADTYPE_FLAGS_GENERAL { // For other hardware platforms, device starts advertising upon initialization uint8 initial_advertising_enable = TRUE; // By setting this to zero, the device will go into the waiting state after // being discoverable for 30.72 second, and will not being advertising again // until the enabler is set back to TRUE uint16 gapRole_AdvertOffTime = 0; } // Set advertising interval { uint16 advIntMin = DEFAULT_ADVERTISING_INTERVAL_MIN; uint16 advIntMax = DEFAULT_ADVERTISING_INTERVAL_MAX; // GAP_SetParamValue( TGAP_LIM_DISC_ADV_INT_MIN, advInt ); // GAP_SetParamValue( TGAP_LIM_DISC_ADV_INT_MAX, advInt ); GAP_SetParamValue( TGAP_GEN_DISC_ADV_INT_MIN, advIntMin ); GAP_SetParamValue( TGAP_GEN_DISC_ADV_INT_MAX, advIntMax ); }
閃爍的做法是用osal timer 如下
uint16 SimpleBLEPeripheral_ProcessEvent( uint8 task_id, uint16 events ) { // ... if ( events & LED_BLINKING_EVT ) { LED_PIN = ~LED_PIN; // 切換LED狀態 counter_led++; if ( counter_led < led_blink_times ) { // restart led blinking timer osal_start_timerEx( simpleBLEPeripheral_TaskID, LED_BLINKING_EVT, LED_BLINKING_PERIOD ); } return (events ^ LED_BLINKING_EVT); } }
請問為什麼會停止廣播呢?
感觉是状态集混乱了,
查一下软件看是不是有什么地方关掉了广播但是没有更新gapRoleState的