When I use sd_ble_gap_adv_start( ), sometimes get return value NRF_ERROR_BUSY . What's the meaning of this error No. ?
I don't know, what are you doing wrong, but this works for me without any error:
static bool advertising_state = false;
static void on_ble_evt(ble_evt_t * p_ble_evt)
{
uint32_t err_code;
switch (p_ble_evt->header.evt_id)
{
case BLE_GAP_EVT_CONNECTED:
advertising_state = false;
...
case BLE_GAP_EVT_TIMEOUT:
if (p_ble_evt->evt.gap_evt.params.timeout.src == BLE_GAP_TIMEOUT_SRC_ADVERTISEMENT)
{
led_off(ADVERTISING_LED_PIN_NO);
advertising_state = false;
}
break;
...
}
static void advertising_start(void)
{
uint32_t err_code;
ble_gap_adv_params_t adv_params;
ble_gap_whitelist_t whitelist;
uint32_t count;
advertising_state = true;
led_off(ADVERTISING_LED_PIN_NO);
...
adv_params.timeout = 1;
...
err_code = sd_ble_gap_adv_start(&adv_params);
APP_ERROR_CHECK(err_code);
led_on(ADVERTISING_LED_PIN_NO);
}
static void button_event_handler(uint8_t pin_no, uint8_t button_action)
{
if (button_action == APP_BUTTON_PUSH)
{
switch (pin_no)
{
case KEY_PRESS_BUTTON_PIN_NO:
{
uint32_t err_code;
if (advertising_state == true)
{
err_code = sd_ble_gap_adv_stop();
APP_ERROR_CHECK(err_code);
}
advertising_start();
break;
}
default:
APP_ERROR_HANDLER(pin_no);
break;
}
}
}
I don't know, what are you doing wrong, but this works for me without any error:
static bool advertising_state = false;
static void on_ble_evt(ble_evt_t * p_ble_evt)
{
uint32_t err_code;
switch (p_ble_evt->header.evt_id)
{
case BLE_GAP_EVT_CONNECTED:
advertising_state = false;
...
case BLE_GAP_EVT_TIMEOUT:
if (p_ble_evt->evt.gap_evt.params.timeout.src == BLE_GAP_TIMEOUT_SRC_ADVERTISEMENT)
{
led_off(ADVERTISING_LED_PIN_NO);
advertising_state = false;
}
break;
...
}
static void advertising_start(void)
{
uint32_t err_code;
ble_gap_adv_params_t adv_params;
ble_gap_whitelist_t whitelist;
uint32_t count;
advertising_state = true;
led_off(ADVERTISING_LED_PIN_NO);
...
adv_params.timeout = 1;
...
err_code = sd_ble_gap_adv_start(&adv_params);
APP_ERROR_CHECK(err_code);
led_on(ADVERTISING_LED_PIN_NO);
}
static void button_event_handler(uint8_t pin_no, uint8_t button_action)
{
if (button_action == APP_BUTTON_PUSH)
{
switch (pin_no)
{
case KEY_PRESS_BUTTON_PIN_NO:
{
uint32_t err_code;
if (advertising_state == true)
{
err_code = sd_ble_gap_adv_stop();
APP_ERROR_CHECK(err_code);
}
advertising_start();
break;
}
default:
APP_ERROR_HANDLER(pin_no);
break;
}
}
}