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

restart advertising by ble_advertising_start,and get fatal error

HI,

Version: SDK15.3,ble_app_template,custom board with nrf52832

I'm trying to change my device name by writing data from bluetooth

when  getting 0xdd 0x06 ........,it will trigger the change_device_name_timer_handler as below

the code works before going to ble_advertising_start(&m_advertising, BLE_ADV_MODE_FAST);

and i get  <error> app: Fatal error

static void change_device_name_timer_handler(void * p_context)
{     
      ret_code_t err_code;
      SEGGER_RTT_printf(0, "change device name!\n");
      uint8_t str1[] = "GT06_";
      int len = strlen(str1) + strlen(our_device_name_data) + 1;
      SEGGER_RTT_printf(0, "len1 = %d ,len2 = %d\n",strlen(str1),strlen(our_device_name_data));
      uint8_t concated[len];
      memset(concated, '\0', len);
      strcat(concated, str1);
      strcat(concated, our_device_name_data);
      SEGGER_RTT_printf(0, "len = %d ,name = %s\n",len,concated);
      
//      sd_ble_gap_disconnect(m_conn_handle, BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION);
      ble_gap_conn_sec_mode_t sec_mode;
      BLE_GAP_CONN_SEC_MODE_SET_OPEN(&sec_mode);
      sd_ble_gap_device_name_set(&sec_mode,(const uint8_t *)concated,strlen(concated));
      
      err_code = sd_ble_gap_adv_stop(m_advertising.adv_handle);
      APP_ERROR_CHECK(err_code);
      advertising_init();
      err_code = ble_advertising_start(&m_advertising, BLE_ADV_MODE_FAST);
      APP_ERROR_CHECK(err_code);

//      ble_advdata_encode(&advdata, m_adv_data.adv_data.p_data, &m_adv_data.adv_data.len);
//      sd_ble_gap_adv_set_configure(&m_adv_handle, &m_adv_data, &adv_params);
//      sd_ble_gap_adv_stop(m_adv_handle);
//      sd_ble_gap_adv_start(m_adv_handle, APP_BLE_CONN_CFG_TAG);
}

Any help is appreciated. Thanks.

Parents
  • Check out this link, which proposes a solution to this. If anything is unclear, or you don't get it to work, please ask and I will look into it.

    Best regards,

    Simon

  • thank you very much! It works!

    static void change_device_name_timer_handler(void * p_context)
    {     
          ret_code_t err_code;
          SEGGER_RTT_printf(0, "change device name!\n");
          uint8_t str1[] = "GT06_";
          int len = strlen(str1) + strlen(our_device_name_data) + 1;
          SEGGER_RTT_printf(0, "len1 = %d ,len2 = %d\n",strlen(str1),strlen(our_device_name_data));
          uint8_t concated[len];
          memset(concated, '\0', len);
          strcat(concated, str1);
          strcat(concated, our_device_name_data);
          SEGGER_RTT_printf(0, "len = %d ,name = %s\n",len,concated);
          
          ble_gap_conn_sec_mode_t sec_mode;
          BLE_GAP_CONN_SEC_MODE_SET_OPEN(&sec_mode);
          sd_ble_gap_device_name_set(&sec_mode,(const uint8_t *)concated,strlen(concated));
          
          uint16_t m_adv_current_slave_link_conn_handle_saved = m_advertising.current_slave_link_conn_handle;
          advertising_init();
          m_advertising.current_slave_link_conn_handle = m_adv_current_slave_link_conn_handle_saved;
    
    
    }

    Surprisingly,i dont have to stop advertising and restart it!

Reply
  • thank you very much! It works!

    static void change_device_name_timer_handler(void * p_context)
    {     
          ret_code_t err_code;
          SEGGER_RTT_printf(0, "change device name!\n");
          uint8_t str1[] = "GT06_";
          int len = strlen(str1) + strlen(our_device_name_data) + 1;
          SEGGER_RTT_printf(0, "len1 = %d ,len2 = %d\n",strlen(str1),strlen(our_device_name_data));
          uint8_t concated[len];
          memset(concated, '\0', len);
          strcat(concated, str1);
          strcat(concated, our_device_name_data);
          SEGGER_RTT_printf(0, "len = %d ,name = %s\n",len,concated);
          
          ble_gap_conn_sec_mode_t sec_mode;
          BLE_GAP_CONN_SEC_MODE_SET_OPEN(&sec_mode);
          sd_ble_gap_device_name_set(&sec_mode,(const uint8_t *)concated,strlen(concated));
          
          uint16_t m_adv_current_slave_link_conn_handle_saved = m_advertising.current_slave_link_conn_handle;
          advertising_init();
          m_advertising.current_slave_link_conn_handle = m_adv_current_slave_link_conn_handle_saved;
    
    
    }

    Surprisingly,i dont have to stop advertising and restart it!

Children
No Data
Related