This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts
This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

bsp_event_handler not catching button event with high frequency notifications

Hi All,

I have created a custom board header file based off of the pca10040.h file. I have customised this to support 10 buttons and 2 leds. I have also extended the array app_button_cfg_t app_buttons[BUTTONS_NUMBER] in bsp.c to support the 10 buttons and bsp_event_t to  include BSP_EVENT_KEY_8 and BSP_EVENT_KEY_9. I have also set the number of GPIOTE_CONFIG_NUM_OF_LOW_POWER_EVENTS to 10 in sdk_gonfig.h. My code is based on extending the ble_app_template to include a custom service and this all works. 

I have setup a timer with a notification interval of 20ms (50Hz) to send 4 bytes during each notification. The first 2 bytes are analog data and the last two bytes are button states from 9 buttons. 

Before enabling the notifications from a central device, the bsp_event_handler catches every button press perfectly (checked it on a scope). However, when i enable notifications at this data rate, i am unable to catch the disconnect button (long press) or any of the 9 other buttons properly, or at all.

What can i do to resolve this?

Cheers,

Zoran

SDK 15.2, RIGADO BMD-300 nrf52832

static void bsp_event_handler(bsp_event_t event)
{
    ret_code_t err_code;

    switch (event)
    {
    case BSP_EVENT_SLEEP:
        sleep_mode_enter();
        break; // BSP_EVENT_SLEEP

    case BSP_EVENT_DISCONNECT:
        err_code = sd_ble_gap_disconnect(m_conn_handle,
                                         BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION);
        if (err_code != NRF_ERROR_INVALID_STATE)
        {
            APP_ERROR_CHECK(err_code);
        }
        break; // BSP_EVENT_DISCONNECT

    case BSP_EVENT_WHITELIST_OFF:
        if (m_conn_handle == BLE_CONN_HANDLE_INVALID)
        {
            err_code = ble_advertising_restart_without_whitelist(&m_advertising);
            if (err_code != NRF_ERROR_INVALID_STATE)
            {
                APP_ERROR_CHECK(err_code);
            }
        }
        break; // BSP_EVENT_KEY_0

    case BSP_EVENT_KEY_1:
        value[2] = value[2] ^ 0x01;
        break; // GL1 button pressed

    case BSP_EVENT_KEY_2:
        value[2] = value[2] ^ 0x02;
        break; // GL2 button pressed

    case BSP_EVENT_KEY_3:
        value[2] = value[2] ^ 0x04;
        break; // GL3 button pressed

    case BSP_EVENT_KEY_4:
        value[2] = value[2] ^ 0x08;
        break; // GL4 button pressed

    case BSP_EVENT_KEY_5:
        value[2] = value[2] ^ 0x10;
        break; // GL5 button pressed

    case BSP_EVENT_KEY_6:
        value[2] = value[2] ^ 0x20;
        nrf_gpio_pin_toggle(LED_2);
        break; // GL6 button pressed

    case BSP_EVENT_KEY_7:
        value[2] = value[2] ^ 0x40;
        break; // Safety button pressed

    case BSP_EVENT_KEY_8:
        value[2] = value[2] ^ 0x80;
        nrf_gpio_pin_toggle(LED_2);
        break; // button pressed

    case BSP_EVENT_KEY_9:
        value[3] = value[3] ^ 0x01;
        break; // button pressed

    default:
        break;
    }
}

Parents Reply Children
No Data
Related