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

can't wakeup form DEFAULT_BTLE_INACTIVITY_DISCONNECT_PERIOD

DEFAULT_BTLE_INACTIVITY_DISCONNECT_PERIOD is 3600//one hour i can't wakeup if disconnect'time over one hour. but i can wake up form com_event_advertising_timeout

my code :


    switch (evt->type)
    {
        case com_event_connected:
            s_connection_state = state_connected;                    
            m_mouse_sensor_enable();           
            {  
                       m_prw_mgmt_set_sysoff_timeout(DEFAULT_BTLE_INACTIVITY_DISCONNECT_PERIOD);
            }

            break;

        case com_event_data_received:
            if(evt->data.data_received.report_type==BLE_HIDS_REP_TYPE_FEATURE)
            {
          
                if(evt->data.data_received.len==2 && evt->data.data_received.data[0]==0xB0 \
                && evt->data.data_received.data[1]==0x07)
                {
                    jump_to_bootloader();
                }
            }
            else if(evt->data.data_received.report_type==BLE_HIDS_REP_TYPE_OUTPUT)
            {
               
            }
            break;

        case com_event_timing_update:
            break;

        case com_event_advertising_bondable:
            m_mouse_sensor_disable();
        
            rng_tries = 3;
            err_code  = NRF_ERROR_SOC_RAND_NOT_ENOUGH_VALUES;
            while (err_code == NRF_ERROR_SOC_RAND_NOT_ENOUGH_VALUES && rng_tries != 0)
            {
                err_code   = hal_rng_vector_get(s_oob_key, 16);
                rng_tries -= 1;
            }
            break;
        
        case com_event_address_changed:
            m_coms_ble_addr_get(&ble_addr);
            break;
        
        case com_event_passkey_req:
            break;
        
        case com_event_oobkey_req:
            m_coms_ble_oobkey_set(s_oob_key);
            m_mouse_sensor_enable();
            break;        

        case com_event_key_sent:
            break;

        case com_event_data_read:
            break;

        case com_event_disconnected:
            s_connection_state = state_disconnected;
         /* Fall through */
        case com_event_advertising_timeout:
             m_pwr_mgmt_goto_sysoff();
//             err_code = sd_ble_gap_adv_stop();
//             err_code = m_coms_ble_adv_start();
             break;

        default:
         break;

what's wrong?

desktop2 v2.1.1 softdevice 6.0.0 nrf51822

  • We have two known bugs that we recently found in Desktop 2 v2.1.1 firmware.

    1. The keyboard will not pair up after DEFAULT_BTLE_INACTIVITY_DISCONNECT_PERIOD
    2. The keyboard can have issues waking up from button-presses after going to system-off mode in general.

    Could you replace the library m_pwr_and_clk_mgmt with the attached files and report back? m_pwr_and_clk_mgmt.c

    m_pwr_and_clk_mgmt.h

    You'll also need to do one change in main.c, function m_coms_handler, case com_event_advertising_timeout:

     case com_event_advertising_timeout:
        if (!m_keyboard_pairing_btn_pressed())
        {
            err_code = app_sched_event_put(0,0, m_pwr_mgmt_goto_sysoff);
            APP_ERROR_CHECK(err_code);
        }
        break;
    

    Best regards, Håkon

    edit: My initial fix broke Gazell part of the keyboard. re-wrote the fix.

Related