This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

How to stop advertising ?

Hi,

I am testing **ble_app_uart example in the path of nRF51-SDK\nRF51_SDK_9.0.0_2e23562\examples\ble_peripheral\ble_app_uart\pca10028\s110 \arm5_no_packs\ble_app_uart_s100_pca10028.

I want to start and stop advertising manually on a certain condition.

ble_advertising_start(BLE_ADV_MODE_FAST) works for advertising . But I can't stop it.

I tried several ways, still in trouble.

I need help.

Thanks.

Parents
  • Thanks

    As atune answers, sd_ble_gap_adv_stop() works for stopping it. However sometimes sd_ble_gap_adv_stop() does not works as I intended by other events.

    When put the function in the nus_data_handler(ble_nus_t * p_nus, uint8_t * mbda_data, uint16_t length), it does not work. So I make a flag in the hadler for an condition, and then check the flag in main(){ } and applied sd_ble_gap_adv_stop() as following.

    main {
    ~~~
      for (;;)
        {
    	power_manage();
    	
           if (CONN_FLAG == true)
            { 
    	     sd_ble_gap_adv_stop();
    	}			
        }
    }
    

    I am not sure whether I am doing right.

    APP_ADV_TIMEOUT_IN_SECONDS is not applicable to my case because stopping period of advertising is not constant. When a correct value is received by NUS Event, advertising should stop. If I can make APP_ADV_TIMEOUT_IN_SECONDS a static variable, it may work. I think.

    If is there better way, please let me know. Thanks.

Reply
  • Thanks

    As atune answers, sd_ble_gap_adv_stop() works for stopping it. However sometimes sd_ble_gap_adv_stop() does not works as I intended by other events.

    When put the function in the nus_data_handler(ble_nus_t * p_nus, uint8_t * mbda_data, uint16_t length), it does not work. So I make a flag in the hadler for an condition, and then check the flag in main(){ } and applied sd_ble_gap_adv_stop() as following.

    main {
    ~~~
      for (;;)
        {
    	power_manage();
    	
           if (CONN_FLAG == true)
            { 
    	     sd_ble_gap_adv_stop();
    	}			
        }
    }
    

    I am not sure whether I am doing right.

    APP_ADV_TIMEOUT_IN_SECONDS is not applicable to my case because stopping period of advertising is not constant. When a correct value is received by NUS Event, advertising should stop. If I can make APP_ADV_TIMEOUT_IN_SECONDS a static variable, it may work. I think.

    If is there better way, please let me know. Thanks.

Children
Related