在BLE扫描器应用中执行读取操作的同时获取垃圾值和实际数据

时间:2019-04-03 06:55:40

标签: c bluetooth-lowenergy

我在segger嵌入式工作室中的 nrf52832 上工作。使用 ble扫描仪应用,我正在编写和读取一些值。在读取值时,我正在随机获取一些垃圾数据。我正在将数据写入一些数组。

请考虑有A[2], B[4], C[45]。为了数组A和B,我正在编写完整的数据。所以在回读它们时,我正在获取数据。对于C[45],,我没有写完整的数据。

例如,它的大小为45 ,我只写了5个字节的数据,所以回读时,我得到了 5个字节的数据以及40个字节的垃圾数据。 我的数据是 12345 ,垃圾值是 12345!?M

可能是什么问题?

static void on_write(ble_cus_t * p_cus, ble_evt_t const * p_ble_evt)
{
    ble_gatts_evt_write_t * p_evt_write = &p_ble_evt->evt.gatts_evt.params.write;

     Custom Value Characteristic Written to.
    if (p_evt_write->handle == p_cus->custom_value_handles.value_handle)
    {
        nrf_gpio_pin_toggle(LED_4);
    }

    // Check if the Custom value CCCD is written to and that the value is the appropriate length, i.e 2 bytes.
    if ((p_evt_write->handle == p_cus->custom_value_handles.cccd_handle)
        && (p_evt_write->len == 2)
       )
    {

        NRF_LOG_INFO("on_write: len %d, p_evt_write->data[0]: %d, p_evt_write->data[1]: %d.",
                     p_evt_write->len,
                     p_evt_write->data[0],
                     p_evt_write->data[1]);

        // CCCD written, call application event handler
        if (p_cus->evt_handler != NULL)
        {
            ble_cus_evt_t evt;

            if (ble_srv_is_notification_enabled(p_evt_write->data))
            {
                evt.evt_type = BLE_CUS_EVT_NOTIFICATION_ENABLED;
            }
            else
            {
                evt.evt_type = BLE_CUS_EVT_NOTIFICATION_DISABLED;
            }
            // Call the application event handler.
            p_cus->evt_handler(p_cus, &evt);
        }
    }

}

0 个答案:

没有答案