This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

How to submit bugs on the pc-ble-driver?

I am trying to find where to submit bugs against the pc-ble-driver. There are two major bugs I have found

  1. saved CCCDs (in a bonded connection) do not get restored when calling the sd_ble_gatts_sys_attr_set() method with the locally saved configuration data.
    1. This bug is very problematic as there is no work-a-round. One simply will be unable to transfer data to a bonded peer on a reconnect (if the bonded peer follows the spec).
    2. This bug also prevents me from invoking a service-changed event (though it is clear that the peer has enabled the CCCD in the previous connection).
  2. when handling a BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST the update=0 option does not work. If one gets this event one MUST update the attribute value
    1. This bug is less severe because there is a work-a-round ... update the value. It may be the same value, but you need to call the update method with the update value.

I have posted these problems to the forum for some time now but its probably better to post them directly to the pc-ble-driver development team. Looked on git-hub but could not find a way to do it.

  • Hi,

    1. I suggest we continue in this thread regarding the issue with sd_ble_gatts_sys_attr_set().

    2. In what context do you see this? If only for BLE_GATTS_AUTHORIZE_TYPE_WRITE, then this is expected and in line with the API documentation.

    I have posted these problems to the forum for some time now but its probably better to post them directly to the pc-ble-driver development team. Looked on git-hub but could not find a way to do it.

    Bugs for the pc-ble-driver should be reported here on DevZone.

  • First, the documentation on the BLE_GATTS_AUTHORIZE_TYPE_WRITE states that IF I set the update parameter to 0 then I need not set the value; the current value is to be used. However, that is not the behavior. If I do NOT set the value, the client read does not work. Fortunately the bug is not too serious, because I can just set the value to the current value. It does not prevent me from performing the operations I need to do and interoperating with clients

  • Hi,

    brianreinhold said:
    the documentation on the BLE_GATTS_AUTHORIZE_TYPE_WRITE states that IF I set the update parameter to 0 then I need not set the value; the current value is to be used.

    Where do you see that? Which pc-ble-driver version and which SoftDevice version do you use?

  • The only documentation that exists is from the the h-files

    /**@brief Respond to a Read/Write authorization request.
     *
     * @note This call should only be used as a response to a @ref BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST event issued to the application.
     *
     * @mscs
     * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_AUTH_MSC}
     * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_BUF_AUTH_MSC}
     * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_NOBUF_NOAUTH_MSC}
     * @mmsc{@ref BLE_GATTS_READ_REQ_AUTH_MSC}
     * @mmsc{@ref BLE_GATTS_WRITE_REQ_AUTH_MSC}
     * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_QUEUE_FULL_MSC}
     * @mmsc{@ref BLE_GATTS_QUEUED_WRITE_PEER_CANCEL_MSC}
     * @endmscs
     *
     * @param[in] conn_handle                 Connection handle.
     * @param[in] p_rw_authorize_reply_params Pointer to a structure with the attribute provided by the application.
     *
     * @note @ref ble_gatts_authorize_params_t::p_data is ignored when this function is used to respond
     *       to a @ref BLE_GATTS_AUTHORIZE_TYPE_READ event if @ref ble_gatts_authorize_params_t::update
     *       is set to 0.
     *
     * @retval ::NRF_SUCCESS               Successfully queued a response to the peer, and in the case of a write operation, Attribute Table updated.
     * @retval ::BLE_ERROR_INVALID_CONN_HANDLE Invalid Connection Handle.
     * @retval ::NRF_ERROR_BUSY            The stack is busy, process pending events and retry.
     * @retval ::NRF_ERROR_INVALID_ADDR    Invalid pointer supplied.
     * @retval ::NRF_ERROR_INVALID_STATE   Invalid Connection State or no authorization request pending.
     * @retval ::NRF_ERROR_INVALID_PARAM   Authorization op invalid,
     *                                         handle supplied does not match requested handle,
     *                                         or invalid data to be written provided by the application.
     * @retval ::NRF_ERROR_TIMEOUT There has been a GATT procedure timeout. No new GATT procedure can be performed without reestablishing the connection.
     */
    SVCALL(SD_BLE_GATTS_RW_AUTHORIZE_REPLY, uint32_t, sd_ble_gatts_rw_authorize_reply(adapter_t *adapter, uint16_t conn_handle, ble_gatts_rw_authorize_reply_params_t const *p_rw_authorize_reply_params));
    

    This is from the ble_gatts.h file supplied with the latest build of the pc-ble-driver available on line. Since the method has the 'adapter_t' parameter, it is clearly for the driver.

    The latest version available is nrf-ble-driver-sd_api_v6-mt-static-4_1_1.lib

    The documentation may be incorrect, but that is all I have to go by. However, its an easy work-a-round, just put in the value and be done with it. However, not being able to reset the CCCDs is a critical issue that I cannot work around. I cannot write them myself though I wish I could right now!

  • brianreinhold said:

    This is from the ble_gatts.h file supplied with the latest build of the pc-ble-driver available on line. Since the method has the 'adapter_t' parameter, it is clearly for the driver.

    The latest version available is nrf-ble-driver-sd_api_v6-mt-static-4_1_1.lib

    I see. But this note is valid for READ, not for WRITE. For write, there is a relevant comment in the declaration of ble_gatts_authorize_params_t:

      uint8_t           update : 1;         /**< If set, data supplied in p_data will be used to update the attribute value.
                                                 Please note that for @ref BLE_GATTS_AUTHORIZE_TYPE_WRITE operations this bit must always be set,
                                                 as the data to be written needs to be stored and later provided by the application. */

Related