0

我的代码有一个问题,即我将 51 个字节传递给 ble 特征,然后调用一个函数通过已建立的 GATT 连接将其发送到我的手机,但是,它发送的数据远多于 51 个字节。

我有一个名为 ble_cus_send_csv 的函数,它接受几个参数。这些是我的自定义结构、我的数据、数据长度和处理程序。

我向其中发送了 51 个字符,我认为这是 51 个字节。我取 sizeof() 这个,它给出了 51。

然后我运行我的 ble_cus_send_csv 函数,它运行并输出我的 51 个字节的数据,之后的字节数要多得多。

我在下面附上了我的发送功能和我的输出。它应该只输出一个固定的 51 个字节。

我在 segger studio 内使用 Nordic NRF52840-dk 板。代码是用 C 编写的。

谢谢, 盖特特征数据

我的 ble_cus_send_csv 函数:

uint32_t ble_cus_send_csv(ble_cus_t * p_cus,
                          uint8_t   * p_data,
                          uint16_t  * p_length,
                          uint16_t    conn_handle)
{
    ble_gatts_hvx_params_t hvx_params;
    NRF_LOG_INFO("Sending CSV.\r\n"); 
    if (p_cus == NULL)
    {
        return NRF_ERROR_NULL;
    }

    uint32_t err_code = NRF_SUCCESS;
    // Send value if connected and notifying.
    if ((p_cus->conn_handle != BLE_CONN_HANDLE_INVALID)) //Setup the parameters to pass into the characteristic value
    {

        memset(&hvx_params, 0, sizeof(hvx_params));

        hvx_params.handle = p_cus->custom_value_handles.value_handle;
        hvx_params.p_data = p_data;
        hvx_params.p_len  = p_length;
        hvx_params.type   = BLE_GATT_HVX_NOTIFICATION;


        err_code = sd_ble_gatts_hvx(conn_handle, &hvx_params);//Set the characteristic
        NRF_LOG_INFO("sd_ble_gatts_hvx result: %x. \r\n", err_code); 
    }
    else
    {
        err_code = NRF_ERROR_INVALID_STATE;
        NRF_LOG_INFO("sd_ble_gatts_hvx result: NRF_ERROR_INVALID_STATE. \r\n"); 
    }
    return err_code;
}

调试器中的 P_length

P_length

4

0 回答 0