У меня есть проблема с моим кодом: я передаю 51 байт для характеристики c, а затем вызываю функцию для отправки этого на мой телефон через предварительно установленное соединение GATT, однако он отправляет гораздо больше данных, чем 51 байт.
У меня есть функция ble_cus_send_csv, которая принимает несколько параметров. Это моя пользовательская структура, мои данные, длина данных и обработчик.
Я отправляю в него 51 символ, который, я считаю, составляет 51 байт. Я беру sizeof () this и, это дает 51.
Затем я запускаю свою функцию ble_cus_send_csv, и она запускается и выводит мои 51 байт данных с гораздо большим количеством байтов впоследствии.
Я прикрепил моя функция отправки ниже и мой вывод. Он должен просто вывести фиксированные 51 байт.
Я использую плату Nordi c NRF52840-dk внутри студии Segger. Код написан на 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 в отладчике