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

Unable to configure DSM_VIRTUAL_ADDR_MAX = 0 with Mesh SDK 4.0.0

Due to the rewrite of the DSM persistent storage layer the DSM_VIRTUAL_ADDR_MAX define can no longer be set to 0. This has changed since 3.2.0 where it could be 0.

During compilation the following static assert is hit.

nrf5-sdk-mesh/mesh/core/api/mesh_config_entry.h:105:5: note: in expansion of macro 'NRF_MESH_STATIC_ASSERT'
  105 |     NRF_MESH_STATIC_ASSERT((MAX_COUNT) > 0);                                                                        \
      |     ^~~~~~~~~~~~~~~~~~~~~~
nrf5-sdk-mesh/mesh/access/src/device_state_manager.c:1598:1: note: in expansion of macro 'MESH_CONFIG_ENTRY'
 1598 | MESH_CONFIG_ENTRY(dsm_virtual_addr,
      | ^~~~~~~~~~~~~~~~~

This happens since Mesh Config doesn't allow for 0 count.

The following patch restores the old possibility to disable virtual addresses if they aren't required.

diff --git a/mesh/access/src/device_state_manager.c b/mesh/access/src/device_state_manager.c
index 1447e9e..b87d708 100644
--- a/mesh/access/src/device_state_manager.c
+++ b/mesh/access/src/device_state_manager.c
@@ -1356,6 +1356,7 @@ static void dsm_nonvirtual_addr_getter(mesh_config_entry_id_t id, void * p_entry
     p_dst->addr = m_addresses[idx].address;
 }
 
+#if DSM_VIRTUAL_ADDR_MAX
 static uint32_t dsm_virtual_addr_setter(mesh_config_entry_id_t id, const void * p_entry)
 {
     if (!IS_IN_RANGE(id.record, MESH_OPT_DSM_VIRTUAL_ADDR_RECORD,
@@ -1388,6 +1389,7 @@ static void dsm_virtual_addr_getter(mesh_config_entry_id_t id, void * p_entry)
     dsm_entry_addr_virtual_t * p_dst = (dsm_entry_addr_virtual_t *)p_entry;
     memcpy(p_dst->uuid, m_virtual_addresses[idx].uuid, NRF_MESH_UUID_SIZE);
 }
+#endif /* DSM_VIRTUAL_ADDR_MAX */
 
 static uint32_t dsm_subnet_setter(mesh_config_entry_id_t id, const void * p_entry)
 {
@@ -1595,6 +1597,7 @@ MESH_CONFIG_ENTRY(dsm_nonvirtual_addr,
                   NULL,
                   NULL);
 
+#if DSM_VIRTUAL_ADDR_MAX
 MESH_CONFIG_ENTRY(dsm_virtual_addr,
                   MESH_OPT_DSM_VIRTUAL_ADDR_RECORD_EID,
                   DSM_VIRTUAL_ADDR_MAX,
@@ -1603,6 +1606,7 @@ MESH_CONFIG_ENTRY(dsm_virtual_addr,
                   dsm_virtual_addr_getter,
                   NULL,
                   NULL);
+#endif /* DSM_VIRTUAL_ADDR_MAX */
 
 MESH_CONFIG_ENTRY(dsm_subnet,
                   MESH_OPT_DSM_SUBNETS_RECORD_EID,

Thanks.

Related