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

Start scaning right after starting advertising.

I use sdk 9.0.0, softdevice s130, nrf51422_xxac. In my application I have to both scan and advertise. When I start one of them (scanning or advertising) application starts running properly but when I start them both my application not always starts executing properly (sometimes it looks like processor is executing total mess and I have to restart it, using button, few times till it starts executing properly). In my code I call starting functions consecutively:

err = ble_advertising_start(BLE_ADV_MODE_FAST); 
APP_ERROR_CHECK(err);
err = sd_ble_gap_scan_start(&scan_params); 

The order of calling these 2 functions does not change anything. In ble_gap.h I did not realize any function for checking if softdevice is ready to start next functionality. I lack ideas what is the reason of such behaviour.

Parents
  • /**< Determines scan interval in units of 0.625 millisecond. */                  
    #define SCAN_INTERVAL 0x00A0    /** < 0.1 s */  
    
                                     
    /**< Determines scan window in units of 0.625 millisecond. */                    
    #define SCAN_WINDOW 0x0050      /** < 0.05 s */                                  
                                                                                 
    static ble_gap_adv_params_t bc_adv_params;                                       
                                                                                     
    static const ble_gap_scan_params_t scan_params = { 0,// Active scanning not set  
                                                     0,// Selective scanning not set. 
                                                    NULL, // White-list not set.     
                                     (uint16_t)SCAN_INTERVAL, // Scan interval.       
                                    (uint16_t)SCAN_WINDOW,   // Scan window.         
                             0 /* Never stop scanning unless explicitly asked to */};
    
    #define APP_ADV_FAST_INTERVAL            0x0028 // 25 ms                         
    #define APP_ADV_SLOW_INTERVAL            0x0C80 // 2 sec                         
    #define APP_ADV_FAST_TIMEOUT             0 // sec                                
    #define APP_ADV_SLOW_TIMEOUT             0 
    

    I use fast advertising. Sorry Aryan I have not answered in comment but it was easier and more clear.

  • I have made some investigation today and first of all I have to apologize to you. Application crashes also when I start only one of scanning or advertising but it is much more in these cases, it only has 100% correct execution when neither advertising nor scanning is started. In my application I have static variable (uart_counter) which is changed whenever I want to send something using uart. There are only two functions that modifies this value. When program went buggy I stopped it with gdb and it occurred that uart_counter was equal to some huge value thats why almost whole RAM is sent. I init uart and start sending before calling ble_advertising_start and ble_scan_start. Is it possible that softdevice may change value of static variable or automatic variable of function that was interrupted by softdevice ?

Reply
  • I have made some investigation today and first of all I have to apologize to you. Application crashes also when I start only one of scanning or advertising but it is much more in these cases, it only has 100% correct execution when neither advertising nor scanning is started. In my application I have static variable (uart_counter) which is changed whenever I want to send something using uart. There are only two functions that modifies this value. When program went buggy I stopped it with gdb and it occurred that uart_counter was equal to some huge value thats why almost whole RAM is sent. I init uart and start sending before calling ble_advertising_start and ble_scan_start. Is it possible that softdevice may change value of static variable or automatic variable of function that was interrupted by softdevice ?

Children
No Data
Related