How to compare the received data over able to the specific value...

Dear team,

1. I am using the Ble_app_uart example from the SDK.

2. I had received the data successfully from the nrf_connect app.

3. Once the data was received over a ble after that I want to compare that data with string & want to perform an action accordingly.

4. if there is any example in sdk then please let me know with the above criteria.

5. please help me above senario.

Parents Reply Children
  • Yes, you may do so in the BLE_NUS_EVT_RX_DATA event that I mentioned in my previous comment.
    The data is retrieved byte-for-byte in the following section of the event handler:

    ..
            for (uint32_t i = 0; i < p_evt->params.rx_data.length; i++)
            {
                do
                {
                    err_code = app_uart_put(p_evt->params.rx_data.p_data[i]);
                    if ((err_code != NRF_SUCCESS) && (err_code != NRF_ERROR_BUSY))
                    {
                        NRF_LOG_ERROR("Failed receiving NUS message. Error 0x%x. ", err_code);
                        APP_ERROR_CHECK(err_code);
                    }
                } while (err_code == NRF_ERROR_BUSY);
            }
    ..


    You may remove the app_uart_put call if you do not wish for it to be sent to the UART peripheral, and then instead read the p_evt->params.rx_data.p_data into another variable for later processing.

    Best regards,
    Karl

  • Hi Karl,

    Thanks for the help.

    every single time I am sending the new data from NRF connect app.

    So Could u please tell me

    And I want to wait till the new data had arrived

  • Hi Karl,

    Thanks for the help.

    every single time I am sending the new data from NRF connect app.

    So Could u please tell me

    And I want to wait till the new data not had arrived.

    and once that data had arrived I want to out of that loop.

  • How to wait till the new data had come from NRF connect app.

  • static void nus_data_handler(ble_nus_evt_t * p_evt)
    {
        int attempt = 0;
        char arr[6];
        char arr_1[6];
        
        bool flag = 0;
        
        if (p_evt->type == BLE_NUS_EVT_RX_DATA)
        {
            uint32_t err_code;
    
            NRF_LOG_DEBUG("Received data from BLE NUS. Writing data on UART.");
            NRF_LOG_HEXDUMP_DEBUG(p_evt->params.rx_data.p_data, p_evt->params.rx_data.length);
    
            for (uint32_t i = 0; i < p_evt->params.rx_data.length; i++)
            {
                do
                {
                    err_code = app_uart_put(p_evt->params.rx_data.p_data[i]);
    
                    if ((err_code != NRF_SUCCESS) && (err_code != NRF_ERROR_BUSY))
                    {
                        NRF_LOG_ERROR("Failed receiving NUS message. Error 0x%x. ", err_code);
                        APP_ERROR_CHECK(err_code);
                    }
                }while (err_code == NRF_ERROR_BUSY);
            }
            if(p_evt->params.rx_data.p_data[p_evt->params.rx_data.length - 1] == '\r')
            {
                while (app_uart_put('\n') == NRF_ERROR_BUSY);
            }
    
            //storing the data into array which is comming from the ble_master(nrf_connect app)
            for(int i=0; i<=5; i++)
            {
              arr[i] = p_evt->params.rx_data.p_data[i];
            }
    
            if(strcmp(arr, "123456") == 0)
            {
              printf("\nPassword is correct");
            }
    
            if(strcmp(arr, "123456") != 0)
            {
              printf("\nPassword is incorrect!!! Please try again");
              printf("\nPassword : "); // after this I want to wait till the new data had arrived.
    
              //strcpy(arr_1, arr);
    
              if(strcmp(arr, "123456") == 0)
              {
                printf("\nPassword is correct");            
              }
    
            }    
        }
    }

Related