<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://devzone.nordicsemi.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Generic Power OnOff Setup Server allow publishing but the standard doesn&amp;#39;t</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/68040/generic-power-onoff-setup-server-allow-publishing-but-the-standard-doesn-t</link><description>From Mesh Model v1.0.1 section 3.3.5.1 Generic Power OnOff Setup Server 
 &amp;quot;This model shall support model subscription, as defined in Section 4.2.3 of the Mesh Profile specification [2].&amp;quot; 
 Thus the Generic Power OnOff Setup Server doesn&amp;#39;t support publishing</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Fri, 22 Jan 2021 10:04:36 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/68040/generic-power-onoff-setup-server-allow-publishing-but-the-standard-doesn-t" /><item><title>RE: Generic Power OnOff Setup Server allow publishing but the standard doesn't</title><link>https://devzone.nordicsemi.com/thread/290691?ContentTypeID=1</link><pubDate>Fri, 22 Jan 2021 10:04:36 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:b329a18b-d9da-4fc6-9bbf-5156d6e9efe6</guid><dc:creator>Mttrinh</dc:creator><description>&lt;p&gt;Thanks for the feedback.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Generic Power OnOff Setup Server allow publishing but the standard doesn't</title><link>https://devzone.nordicsemi.com/thread/289684?ContentTypeID=1</link><pubDate>Mon, 18 Jan 2021 10:53:20 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:59b847fc-08f6-4356-ac56-ac7cdb8f4ed0</guid><dc:creator>JonasJ</dc:creator><description>&lt;p&gt;Thanks &lt;a href="https://devzone.nordicsemi.com/members/mttrinh"&gt;Mttrinh&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This was only partially fixed in the v5.0.0. The response to Generic OnPowerUp Set is still sent from the Setup Server which is in violation to the standard.&lt;/p&gt;
&lt;p&gt;The following patch fixes the remaining issue and clean up the code.&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="diff"&gt;diff --git a/models/model_spec/generic_ponoff/include/generic_ponoff_setup_server.h b/models/model_spec/generic_ponoff/include/generic_ponoff_setup_server.h
index 8175dfa..70d773e 100644
--- a/models/model_spec/generic_ponoff/include/generic_ponoff_setup_server.h
+++ b/models/model_spec/generic_ponoff/include/generic_ponoff_setup_server.h
@@ -152,7 +152,7 @@ struct __generic_ponoff_server_t
  *                                  destination. Wait for the transmission to finish before sending
  *                                  new segmented packets.
  */
-uint32_t generic_ponoff_server_status_publish(generic_ponoff_server_t * p_server, const generic_ponoff_status_params_t * p_params);
+uint32_t generic_ponoff_server_status_publish(const generic_ponoff_server_t * p_server, const generic_ponoff_status_params_t * p_params);
 
 
 /**
diff --git a/models/model_spec/generic_ponoff/src/generic_ponoff_setup_server.c b/models/model_spec/generic_ponoff/src/generic_ponoff_setup_server.c
index e610408..8c2eaa4 100644
--- a/models/model_spec/generic_ponoff/src/generic_ponoff_setup_server.c
+++ b/models/model_spec/generic_ponoff/src/generic_ponoff_setup_server.c
@@ -49,37 +49,11 @@
 #include &amp;quot;nrf_mesh_utils.h&amp;quot;
 #include &amp;quot;nordic_common.h&amp;quot;
 
-typedef enum
-{
-    PONOFF_SERVER,
-    PONOFF_SETUP_SERVER
-} server_context_type_t;
-
-static uint32_t status_send(const void * p_ctx,
-                            server_context_type_t ctx_type,
+static uint32_t status_send(const generic_ponoff_server_t * p_server,
                             const access_message_rx_t * p_message,
                             const generic_ponoff_status_params_t * p_params)
 {
     generic_ponoff_status_msg_pkt_t msg_pkt;
-    uint16_t model_handle;
-    bool force_segmented;
-    nrf_mesh_transmic_size_t transmic_size;
-
-    if (ctx_type == PONOFF_SERVER)
-    {
-        const generic_ponoff_server_t * p_server = (generic_ponoff_server_t *) p_ctx;
-        model_handle = p_server-&amp;gt;model_handle;
-        force_segmented = p_server-&amp;gt;settings.force_segmented;
-        transmic_size = p_server-&amp;gt;settings.transmic_size;
-    }
-    else
-    {
-        NRF_MESH_ASSERT(p_message != NULL);
-        const generic_ponoff_setup_server_t * p_server = (generic_ponoff_setup_server_t *) p_ctx;
-        model_handle = p_server-&amp;gt;model_handle;
-        force_segmented = p_server-&amp;gt;settings.force_segmented;
-        transmic_size = p_server-&amp;gt;settings.transmic_size;
-    }
 
     if (p_params-&amp;gt;on_powerup &amp;gt; GENERIC_ON_POWERUP_MAX)
     {
@@ -93,17 +67,17 @@ static uint32_t status_send(const void * p_ctx,
         .opcode = ACCESS_OPCODE_SIG(GENERIC_PONOFF_OPCODE_STATUS),
         .p_buffer = (const uint8_t *) &amp;amp;msg_pkt,
         .length = sizeof(generic_ponoff_status_msg_pkt_t),
-        .force_segmented = force_segmented,
-        .transmic_size = transmic_size
+        .force_segmented = p_server-&amp;gt;settings.force_segmented,
+        .transmic_size = p_server-&amp;gt;settings.transmic_size
     };
 
     if (p_message == NULL)
     {
-        return access_model_publish(model_handle, &amp;amp;reply);
+        return access_model_publish(p_server-&amp;gt;model_handle, &amp;amp;reply);
     }
     else
     {
-        return access_model_reply(model_handle, p_message, &amp;amp;reply);
+        return access_model_reply(p_server-&amp;gt;model_handle, p_message, &amp;amp;reply);
     }
 }
 
@@ -114,7 +88,7 @@ static void periodic_publish_cb(access_model_handle_t handle, void * p_args)
     generic_ponoff_status_params_t out_data = {0};
 
     p_s_server-&amp;gt;settings.p_callbacks-&amp;gt;ponoff_cbs.get_cb(p_s_server, NULL, &amp;amp;out_data);
-    (void) status_send(p_server, PONOFF_SERVER, NULL, &amp;amp;out_data);
+    (void) status_send(p_server, NULL, &amp;amp;out_data);
 }
 
 
@@ -131,7 +105,7 @@ static void handle_get(access_model_handle_t model_handle, const access_message_
     if (p_rx_msg-&amp;gt;length == 0)
     {
         p_s_server-&amp;gt;settings.p_callbacks-&amp;gt;ponoff_cbs.get_cb(p_s_server, &amp;amp;p_rx_msg-&amp;gt;meta_data, &amp;amp;out_data);
-        (void) status_send(p_server, PONOFF_SERVER, p_rx_msg, &amp;amp;out_data);
+        (void) status_send(p_server, p_rx_msg, &amp;amp;out_data);
     }
 }
 
@@ -151,7 +125,7 @@ static uint32_t generic_ponoff_server_init(generic_ponoff_server_t * p_server, u
         return NRF_ERROR_NULL;
     }
 
-    /* Initialize parent model instsances - Generic OnOff */
+    /* Initialize parent model instances - Generic OnOff */
     status = generic_onoff_server_init(&amp;amp;p_server-&amp;gt;generic_onoff_srv, element_index);
 
     if (status == NRF_SUCCESS)
@@ -178,7 +152,7 @@ static uint32_t generic_ponoff_server_init(generic_ponoff_server_t * p_server, u
     return status;
 }
 
-uint32_t generic_ponoff_server_status_publish(generic_ponoff_server_t * p_server, const generic_ponoff_status_params_t * p_params)
+uint32_t generic_ponoff_server_status_publish(const generic_ponoff_server_t * p_server, const generic_ponoff_status_params_t * p_params)
 {
     if (p_server == NULL ||
         p_params == NULL)
@@ -186,7 +160,7 @@ uint32_t generic_ponoff_server_status_publish(generic_ponoff_server_t * p_server
         return NRF_ERROR_NULL;
     }
 
-    return status_send(p_server, PONOFF_SERVER, NULL, p_params);
+    return status_send(p_server, NULL, p_params);
 }
 
 /**************************************************************************************************/
@@ -214,7 +188,7 @@ static void handle_set(access_model_handle_t model_handle, const access_message_
 
         if (p_rx_msg-&amp;gt;opcode.opcode == GENERIC_PONOFF_OPCODE_SET)
         {
-            (void) status_send(p_server, PONOFF_SETUP_SERVER, p_rx_msg, &amp;amp;out_param);
+            (void) status_send(&amp;amp;p_server-&amp;gt;generic_ponoff_srv, p_rx_msg, &amp;amp;out_param);
         }
     }
 }
@@ -239,7 +213,7 @@ uint32_t generic_ponoff_setup_server_init(generic_ponoff_setup_server_t * p_serv
         return NRF_ERROR_NULL;
     }
 
-    /* Initialize parent model instsances - Generic Default Transition Time */
+    /* Initialize parent model instances - Generic Default Transition Time */
     status = generic_dtt_server_init(&amp;amp;p_server-&amp;gt;generic_dtt_srv, element_index);
 
     if (status == NRF_SUCCESS)
@@ -247,7 +221,7 @@ uint32_t generic_ponoff_setup_server_init(generic_ponoff_setup_server_t * p_serv
         status = access_model_subscription_list_dealloc(p_server-&amp;gt;generic_dtt_srv.model_handle);
     }
 
-    /* Initialize parent model instsances - Generic Power OnOff */
+    /* Initialize parent model instances - Generic Power OnOff */
     if (status == NRF_SUCCESS)
     {
         p_server-&amp;gt;generic_ponoff_srv.settings.force_segmented = p_server-&amp;gt;settings.force_segmented;
-- 
2.29.2
&lt;/pre&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: Generic Power OnOff Setup Server allow publishing but the standard doesn't</title><link>https://devzone.nordicsemi.com/thread/278969?ContentTypeID=1</link><pubDate>Mon, 09 Nov 2020 10:54:33 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:a1c34f65-b2ee-4554-b19b-7443527c92ca</guid><dc:creator>Mttrinh</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;Thank you for reporting this. I have reported this internally.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>