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

Error while setting BLE OFF

Hello,

sd_ble_gap_adv_stop()

returns NRF_ERROR_INVALID_STATE

sd_ble_gap_disconnect(m_connx_handle,  BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION);

Disconnects the device, but it reconnects in the following seconds.

Any idea?

Parents
  • If sd_ble_gap_adv_stop() returns NRF_ERROR_INVALID_STATE then you are not advertising when you call it.

    and if the device reconnects after disconnecting it it's because the device is set to reconnect after it's been disconnected, what's the device?

  • ok here can be a clue : the variable systemState is set to systemOFF when I want to disable BLE and systemON when I want to enable BLE

        static void on_adv_evt(ble_adv_evt_t ble_adv_evt)
    {
      uint32_t err_code;
      ble_gap_addr_t peer_address;
    
    	if(SystemState==SYSTEM_OFF)
    		sd_ble_gap_adv_stop();
      switch (ble_adv_evt){
        case BLE_ADV_EVT_DIRECTED:
          break;
        case BLE_ADV_EVT_FAST:
          break;
        case BLE_ADV_EVT_FAST_WHITELIST:
          break;
    		case BLE_ADV_EVT_SLOW:
          break;
    		case BLE_ADV_EVT_IDLE:
          //sleep_mode_enter();
          break;
    		case BLE_ADV_EVT_WHITELIST_REQUEST:
          break;
        case BLE_ADV_EVT_PEER_ADDR_REQUEST:
            // Only Give peer address if we have a handle to the bonded peer.
            if(m_peer_handle.appl_id != DM_INVALID_ID){
              err_code = dm_peer_addr_get(&m_peer_handle, &peer_address);
              APP_ERROR_CHECK(err_code);
    					err_code = ble_advertising_peer_addr_reply(&peer_address);
    					APP_ERROR_CHECK(err_code);  
            }
          break;
        default:
          break;
      }
    }
    
Reply
  • ok here can be a clue : the variable systemState is set to systemOFF when I want to disable BLE and systemON when I want to enable BLE

        static void on_adv_evt(ble_adv_evt_t ble_adv_evt)
    {
      uint32_t err_code;
      ble_gap_addr_t peer_address;
    
    	if(SystemState==SYSTEM_OFF)
    		sd_ble_gap_adv_stop();
      switch (ble_adv_evt){
        case BLE_ADV_EVT_DIRECTED:
          break;
        case BLE_ADV_EVT_FAST:
          break;
        case BLE_ADV_EVT_FAST_WHITELIST:
          break;
    		case BLE_ADV_EVT_SLOW:
          break;
    		case BLE_ADV_EVT_IDLE:
          //sleep_mode_enter();
          break;
    		case BLE_ADV_EVT_WHITELIST_REQUEST:
          break;
        case BLE_ADV_EVT_PEER_ADDR_REQUEST:
            // Only Give peer address if we have a handle to the bonded peer.
            if(m_peer_handle.appl_id != DM_INVALID_ID){
              err_code = dm_peer_addr_get(&m_peer_handle, &peer_address);
              APP_ERROR_CHECK(err_code);
    					err_code = ble_advertising_peer_addr_reply(&peer_address);
    					APP_ERROR_CHECK(err_code);  
            }
          break;
        default:
          break;
      }
    }
    
Children
No Data
Related