Hi,
Some time ago I ask a question about changing the publish address of a node in the mesh locally. I received the answer in the following threat and verified it:
The answer was the follwing code example:
uint32_t status = NRF_SUCCESS; dsm_handle_t publish_address_handle = DSM_HANDLE_INVALID; nrf_mesh_address_t publish_address_stored; if (access_model_publish_address_get(m_clients[0].model_handle, &publish_address_handle) != NRF_SUCCESS) { status = dsm_address_publish_add(destination_address, &publish_address_handle); } else { if (dsm_address_get(publish_address_handle, &publish_address_stored) == NRF_SUCCESS) { if ((publish_address_stored.type == NRF_MESH_ADDRESS_TYPE_VIRTUAL) || (publish_address_stored.type != NRF_MESH_ADDRESS_TYPE_VIRTUAL && publish_address_stored.value != destination_address)) { /* This should never assert */ NRF_MESH_ASSERT(dsm_address_publish_remove(publish_address_handle) == NRF_SUCCESS); status = dsm_address_publish_add(destination_address, &publish_address_handle); } else { /* Use the retrieved publish_address_handle */ } } else { status = dsm_address_publish_add(destination_address, &publish_address_handle); } } switch (status) { case NRF_ERROR_NO_MEM: __LOG(LOG_SRC_APP, LOG_LEVEL_INFO, "NRF_ERROR_NO_MEM\n"); // status_error_pub_send(handle, p_message, sig_model, ACCESS_STATUS_INSUFFICIENT_RESOURCES); return; case NRF_SUCCESS: break; default: __LOG(LOG_SRC_APP, LOG_LEVEL_INFO, "ACCESS_STATUS_UNSPECIFIED_ERROR\n"); // status_error_pub_send(handle, p_message, sig_model, ACCESS_STATUS_UNSPECIFIED_ERROR); return; } NRF_MESH_ASSERT(access_model_publish_address_set(m_clients[0].model_handle, publish_address_handle) == NRF_SUCCESS);
I now realized that if after I add 5 different addresses to the dsm I receive a NRF_ERROR_NO_MEM as status.
I can not figure out what is wrong. Can you please help me.
Best regards,
Michel