I need to update a characteristic to use write and write without response flags
I'm able to get this working on one of the characteristics but not the other
Running legacy nrf sdk 17.1
When I run this code, the ble characteristic shows up (on nrf Connect) as write only (with response required)
// Add the CMD Characteristic to SoftDevice. std::memset(&add_char_params, 0, sizeof(add_char_params)); add_char_params.uuid = BLE_UUID_DATA_CMD_CHAR; add_char_params.uuid_type = p_dcs->uuid_type; add_char_params.max_len = BLE_DATA_MAX_CMD_CHAR_LEN; add_char_params.init_len = sizeof(uint8_t); add_char_params.is_var_len = true; add_char_params.char_props.write_wo_resp = 1; // this should work // Write request add_char_params.char_props.write = 1; // CMD characteristic has no authorization, no encryption and is not readable add_char_params.read_access = SEC_NO_ACCESS; // CMD characteristic is writable add_char_params.write_access = SEC_OPEN; err_code = characteristic_add(p_dcs->service_handle, &add_char_params, &p_dcs->cmd_handles); if (err_code != NRF_SUCCESS) { return err_code; }
When I run this code (different UUID) it works and nrf Connect shows it having write and write without response abilities
// Add the RCS_TX Characteristic to SoftDevice. This characteristic will // receive data that will be written to the NRF52840 MCU. std::memset(&add_char_params, 0, sizeof(add_char_params)); add_char_params.uuid = BLE_UUID_DATA_RCS_TX_CHAR; add_char_params.uuid_type = p_dcs->uuid_type; add_char_params.max_len = BLE_DATA_BLERCS_MAX_TX_CHAR_LEN; add_char_params.init_len = sizeof(uint8_t); add_char_params.is_var_len = true; // Write command add_char_params.char_props.write_wo_resp = 1; // Write request add_char_params.char_props.write = 1; // No BLE restrictions on access to characteristic, however the firmware // will disconnect unless the peer has authenticated. add_char_params.read_access = SEC_OPEN; add_char_params.write_access = SEC_OPEN; err_code = characteristic_add(p_dcs->service_handle, &add_char_params, &p_dcs->rcs_tx_handles); if (err_code != NRF_SUCCESS) { return err_code; }
Here is the nrf Connect output:
What am I doing wrong?