<?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>[Zigbee] Manufacturer Code clarification</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/108662/zigbee-manufacturer-code-clarification</link><description>Setup: 
 nrf52840DK (Zigbee Cordinator based on Zigbee Coordinator sample) 
 nrf52840DK (ZED) 
 nrf52840 dongle (Wireshark sniffer) 
 NCS v2.4.1 Hi, 
 In my application I am using Manufacturer specific ZCL commands and attributes. All of that seems working</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Wed, 17 Apr 2024 06:17:39 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/108662/zigbee-manufacturer-code-clarification" /><item><title>RE: [Zigbee] Manufacturer Code clarification</title><link>https://devzone.nordicsemi.com/thread/479105?ContentTypeID=1</link><pubDate>Wed, 17 Apr 2024 06:17:39 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:6be0f959-463e-4582-9952-c2704e7292ba</guid><dc:creator>Edvin</dc:creator><description>[quote user="pwpot"]That assert is in 2.6.0 in 2.4.1 it looks different[/quote]
&lt;p&gt;Yes, but it will still only be checked if is_manuf_specific is true?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: [Zigbee] Manufacturer Code clarification</title><link>https://devzone.nordicsemi.com/thread/478445?ContentTypeID=1</link><pubDate>Fri, 12 Apr 2024 06:56:54 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:2edd1e7d-f92e-48ea-8bb3-40b022de9232</guid><dc:creator>Pawel(embeddedsolutions.pl)</dc:creator><description>&lt;p&gt;Hi Edvin,&lt;/p&gt;
&lt;p&gt;Sorry for the late reply.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
[quote userid="26071" url="~/f/nordic-q-a/108662/zigbee-manufacturer-code-clarification/474792"]&lt;p&gt;Whenever you call:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class="evolution-code-editor theme-clouds"&gt;&lt;a href="#" class="fullscreen"&gt;Fullscreen&lt;/a&gt;&lt;div style="width:100%;height:12px;" class=" ace_editor ace-clouds"&gt;&lt;div class="ace_gutter"&gt;&lt;div class="ace_layer ace_gutter-layer ace_folding-enabled" style="margin-top:0px;height:36px;width:40px;"&gt;&lt;div class="ace_gutter-cell " style="height:12px;"&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div class="ace_gutter-active-line" style="display:none;"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="ace_scroller" style="left:40px;right:0px;bottom:0px;"&gt;&lt;div class="ace_content" style="margin-top:0px;width:582px;height:36px;margin-left:0px;"&gt;&lt;div class="ace_layer ace_print-margin-layer"&gt;&lt;div class="ace_print-margin" style="left:484.025px;"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="ace_layer ace_marker-layer"&gt;&lt;/div&gt;&lt;div class="ace_layer ace_text-layer" style="padding:0px 4px;"&gt;&lt;div class="ace_line" style="height:12px;"&gt;&lt;span class="ace_storage ace_type"&gt;void&lt;/span&gt; &lt;span class="ace_identifier"&gt;zb_zcl_send_report_attr_command&lt;/span&gt;&lt;span class="ace_paren ace_lparen"&gt;(&lt;/span&gt;&lt;span class="ace_identifier"&gt;zb_zcl_reporting_info_t&lt;/span&gt; &lt;span class="ace_keyword ace_operator"&gt;*&lt;/span&gt;&lt;span class="ace_identifier"&gt;rep_info&lt;/span&gt;&lt;span class="ace_punctuation ace_operator"&gt;,&lt;/span&gt; &lt;span class="ace_identifier"&gt;zb_uint8_t&lt;/span&gt; &lt;span class="ace_identifier"&gt;param&lt;/span&gt;&lt;span class="ace_paren ace_rparen"&gt;)&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="ace_layer ace_marker-layer"&gt;&lt;/div&gt;&lt;div class="ace_layer ace_cursor-layer ace_hidden-cursors"&gt;&lt;div class="ace_cursor" style="left:4px;top:0px;width:6.00031px;height:12px;"&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="ace_scrollbar ace_scrollbar-v" style="display:none;width:20px;bottom:0px;"&gt;&lt;div class="ace_scrollbar-inner" style="width:20px;height:12px;"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="ace_scrollbar ace_scrollbar-h" style="display:none;height:20px;left:40px;right:0px;"&gt;&lt;div class="ace_scrollbar-inner" style="height:20px;width:582px;"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="height:auto;width:auto;top:0px;left:0px;position:absolute;white-space:pre;font:inherit;overflow:hidden;"&gt;&lt;div style="height:auto;width:auto;top:0px;left:0px;position:absolute;white-space:pre;font:inherit;overflow:visible;"&gt;&lt;/div&gt;&lt;div style="height:auto;width:auto;top:0px;left:0px;position:absolute;white-space:pre;font-style:inherit;font-size:inherit;line-height:inherit;font-family:inherit;overflow:visible;"&gt;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="content-scrollable-wrapper" style="max-width:100%;overflow:auto;max-height:none;"&gt;&lt;pre class="ui-code" data-mode="c_cpp" style="display:none;"&gt;void zb_zcl_send_report_attr_command(zb_zcl_reporting_info_t *rep_info, zb_uint8_t param)&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;wouldn&amp;#39;t the *rep_info hold information so that:&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class="evolution-code-editor theme-clouds"&gt;&lt;a href="#" class="fullscreen"&gt;Fullscreen&lt;/a&gt;&lt;div style="width:100%;height:12px;" class=" ace_editor ace-clouds"&gt;&lt;div class="ace_gutter"&gt;&lt;div class="ace_layer ace_gutter-layer ace_folding-enabled" style="margin-top:0px;height:36px;width:40px;"&gt;&lt;div class="ace_gutter-cell " style="height:12px;"&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div class="ace_gutter-active-line" style="display:none;"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="ace_scroller" style="left:40px;right:0px;bottom:0px;"&gt;&lt;div class="ace_content" style="margin-top:0px;width:582px;height:36px;margin-left:0px;"&gt;&lt;div class="ace_layer ace_print-margin-layer"&gt;&lt;div class="ace_print-margin" style="left:484.025px;"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="ace_layer ace_marker-layer"&gt;&lt;/div&gt;&lt;div class="ace_layer ace_text-layer" style="padding:0px 4px;"&gt;&lt;div class="ace_line" style="height:12px;"&gt;is_manuf_spec = !!ZB_ZCL_IS_ATTR_MANUF_SPEC(attr_desc);&lt;/div&gt;&lt;/div&gt;&lt;div class="ace_layer ace_marker-layer"&gt;&lt;/div&gt;&lt;div class="ace_layer ace_cursor-layer ace_hidden-cursors"&gt;&lt;div class="ace_cursor" style="left:4px;top:0px;width:6.00031px;height:12px;"&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="ace_scrollbar ace_scrollbar-v" style="display:none;width:20px;bottom:0px;"&gt;&lt;div class="ace_scrollbar-inner" style="width:20px;height:12px;"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="ace_scrollbar ace_scrollbar-h" style="display:none;height:20px;left:40px;right:0px;"&gt;&lt;div class="ace_scrollbar-inner" style="height:20px;width:582px;"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="height:auto;width:auto;top:0px;left:0px;position:absolute;white-space:pre;font:inherit;overflow:hidden;"&gt;&lt;div style="height:auto;width:auto;top:0px;left:0px;position:absolute;white-space:pre;font:inherit;overflow:visible;"&gt;&lt;/div&gt;&lt;div style="height:auto;width:auto;top:0px;left:0px;position:absolute;white-space:pre;font-style:inherit;font-size:inherit;line-height:inherit;font-family:inherit;overflow:visible;"&gt;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="content-scrollable-wrapper" style="max-width:100%;overflow:auto;max-height:none;"&gt;&lt;pre class="ui-code" data-mode="text" style="display:none;"&gt;is_manuf_spec = !!ZB_ZCL_IS_ATTR_MANUF_SPEC(attr_desc);&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;would return false if that attribute is not a manufacturer specific attribute?&lt;/p&gt;[/quote]
&lt;p&gt;Yes, is_manuf_spec will be false, and that information is determined based on the attribute descriptor, not based on reporting info.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
[quote userid="26071" url="~/f/nordic-q-a/108662/zigbee-manufacturer-code-clarification/474792"]&lt;p&gt;And if is_manuf_spec is false, then the&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div class="evolution-code-editor theme-clouds"&gt;&lt;a href="#" class="fullscreen"&gt;Fullscreen&lt;/a&gt;&lt;div style="width:100%;height:12px;" class=" ace_editor ace-clouds"&gt;&lt;div class="ace_gutter"&gt;&lt;div class="ace_layer ace_gutter-layer ace_folding-enabled" style="margin-top:0px;height:36px;width:40px;"&gt;&lt;div class="ace_gutter-cell " style="height:12px;"&gt;1&lt;/div&gt;&lt;/div&gt;&lt;div class="ace_gutter-active-line" style="display:none;"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="ace_scroller" style="left:40px;right:0px;bottom:0px;"&gt;&lt;div class="ace_content" style="margin-top:0px;width:582px;height:36px;margin-left:0px;"&gt;&lt;div class="ace_layer ace_print-margin-layer"&gt;&lt;div class="ace_print-margin" style="left:484.025px;"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="ace_layer ace_marker-layer"&gt;&lt;/div&gt;&lt;div class="ace_layer ace_text-layer" style="padding:0px 4px;"&gt;&lt;div class="ace_line" style="height:12px;"&gt;&lt;span class="ace_identifier"&gt;ZB_ASSERT&lt;/span&gt;&lt;span class="ace_paren ace_lparen"&gt;(&lt;/span&gt;&lt;span class="ace_identifier"&gt;rep_info&lt;/span&gt;&lt;span class="ace_keyword ace_operator"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="ace_identifier"&gt;manuf_code&lt;/span&gt; &lt;span class="ace_keyword ace_operator"&gt;!=&lt;/span&gt; &lt;span class="ace_identifier"&gt;ZB_ZCL_NON_MANUFACTURER_SPECIFIC&lt;/span&gt;&lt;span class="ace_paren ace_rparen"&gt;)&lt;/span&gt;&lt;span class="ace_punctuation ace_operator"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="ace_layer ace_marker-layer"&gt;&lt;/div&gt;&lt;div class="ace_layer ace_cursor-layer ace_hidden-cursors"&gt;&lt;div class="ace_cursor" style="left:4px;top:0px;width:6.00031px;height:12px;"&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="ace_scrollbar ace_scrollbar-v" style="display:none;width:20px;bottom:0px;"&gt;&lt;div class="ace_scrollbar-inner" style="width:20px;height:12px;"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="ace_scrollbar ace_scrollbar-h" style="display:none;height:20px;left:40px;right:0px;"&gt;&lt;div class="ace_scrollbar-inner" style="height:20px;width:582px;"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="height:auto;width:auto;top:0px;left:0px;position:absolute;white-space:pre;font:inherit;overflow:hidden;"&gt;&lt;div style="height:auto;width:auto;top:0px;left:0px;position:absolute;white-space:pre;font:inherit;overflow:visible;"&gt;&lt;/div&gt;&lt;div style="height:auto;width:auto;top:0px;left:0px;position:absolute;white-space:pre;font-style:inherit;font-size:inherit;line-height:inherit;font-family:inherit;overflow:visible;"&gt;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="content-scrollable-wrapper" style="max-width:100%;overflow:auto;max-height:none;"&gt;&lt;pre class="ui-code" data-mode="c_cpp" style="display:none;"&gt;ZB_ASSERT(rep_info-&amp;gt;manuf_code != ZB_ZCL_NON_MANUFACTURER_SPECIFIC);&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;p&gt;will not run, right?&lt;/p&gt;[/quote]
&lt;p&gt;That assert is in 2.6.0 in 2.4.1 it looks different.&amp;nbsp;&lt;br /&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;ZB_ASSERT(ep_desc &amp;amp;&amp;amp; cluster_desc &amp;amp;&amp;amp; cluster_desc-&amp;gt;manuf_code != ZB_ZCL_MANUF_CODE_INVALID);&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: [Zigbee] Manufacturer Code clarification</title><link>https://devzone.nordicsemi.com/thread/474792?ContentTypeID=1</link><pubDate>Wed, 20 Mar 2024 08:46:50 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:23760311-3701-46ae-b031-97c2080a41fb</guid><dc:creator>Edvin</dc:creator><description>&lt;p&gt;Hello Pawel,&lt;/p&gt;
&lt;p&gt;I am not saying you are wrong, but I am trying to understand.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Whenever you call:&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;void zb_zcl_send_report_attr_command(zb_zcl_reporting_info_t *rep_info, zb_uint8_t param)&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;wouldn&amp;#39;t the *rep_info hold information so that:&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="text"&gt;is_manuf_spec = !!ZB_ZCL_IS_ATTR_MANUF_SPEC(attr_desc);&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;would return false if that attribute is not a manufacturer specific attribute?&lt;/p&gt;
&lt;p&gt;And if is_manuf_spec is false, then the&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;ZB_ASSERT(rep_info-&amp;gt;manuf_code != ZB_ZCL_NON_MANUFACTURER_SPECIFIC);&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;will not run, right?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: [Zigbee] Manufacturer Code clarification</title><link>https://devzone.nordicsemi.com/thread/474604?ContentTypeID=1</link><pubDate>Tue, 19 Mar 2024 12:28:33 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:d38baab1-976b-452b-8194-af9791e5844c</guid><dc:creator>Pawel(embeddedsolutions.pl)</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;is_manuf_spec = !!ZB_ZCL_IS_ATTR_MANUF_SPEC(attr_desc);&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;returns true indeed. That is because my attribute descriptor looks as follows:&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;#define ZB_SET_ATTR_DESCR_WITH_ZB_ZCL_ATTR_DIAGNOSTIC_FAULT_CODE_ID(data_ptr) \
    { \
        ZB_ZCL_ATTR_DIAGNOSTIC_FAULT_CODE_ID, ZB_ZCL_ATTR_TYPE_U16, \
            ZB_ZCL_ATTR_ACCESS_READ_ONLY | ZB_ZCL_ATTR_ACCESS_REPORTING | ZB_ZCL_ATTR_MANUF_SPEC, (void *)data_ptr \
    }&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Then:&amp;nbsp;&lt;br /&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;ZB_ASSERT(ep_desc &amp;amp;&amp;amp; cluster_desc &amp;amp;&amp;amp; cluster_desc-&amp;gt;manuf_code != ZB_ZCL_MANUF_CODE_INVALID);&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;Manufacturer Code shall be different than 0x0000, otherwise the ASSERT occurs.&lt;/p&gt;
&lt;p&gt;I see that the reporting mechanism is slightly different in 2.6.0. I am going to migrate to 2.6.0 but no matter the version my question will be the same :)&amp;nbsp;&lt;br /&gt;&lt;br /&gt;At this point, In my opinion in the case of manufacturer-specific attributes within the standard cluster, the cluster descriptor shall use a Manufacturer Code different than 0x0000 and that is valid for NCS 2.4.1.&lt;br /&gt;&lt;br /&gt;Maybe, that exact scenario is solved in 2.6.0 because the ASSERT does not check cluster_desc-&amp;gt;manuf_code but rep_info-&amp;gt;manuf_code.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;What do you think?&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Regards,&lt;/p&gt;
&lt;p&gt;Pawel&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: [Zigbee] Manufacturer Code clarification</title><link>https://devzone.nordicsemi.com/thread/474581?ContentTypeID=1</link><pubDate>Tue, 19 Mar 2024 11:40:15 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:1d93fbd2-acaa-4002-90e9-b0d537a598e2</guid><dc:creator>Edvin</dc:creator><description>&lt;p&gt;In fact, this is what it looks like in NCS v2.6.0:&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;void zb_zcl_send_report_attr_command(zb_zcl_reporting_info_t *rep_info, zb_uint8_t param)
{
  zb_uint8_t *cmd_data;
  zb_zcl_reporting_info_t *cur_rep_info;
  zb_zcl_attr_t *attr_desc;
  zb_uint16_t bytes_avail;
  zb_uint8_t attr_size;
  zb_uint8_t send_mode;
  zb_uint8_t is_manuf_spec;

  TRACE_MSG(
      TRACE_ZCL1,
      &amp;quot;&amp;gt;&amp;gt; zb_zcl_send_report_attr_command rep_info %p, param %hd&amp;quot;,
      (FMT__P_H, rep_info, param));

  attr_desc =
    zb_zcl_get_attr_desc_manuf_a(
      rep_info-&amp;gt;ep,
      rep_info-&amp;gt;cluster_id,
      rep_info-&amp;gt;cluster_role,
      rep_info-&amp;gt;attr_id,
      rep_info-&amp;gt;manuf_code);

  is_manuf_spec = !!ZB_ZCL_IS_ATTR_MANUF_SPEC(attr_desc);

  /* ZCL spec, 2.4.11 Report Attributes Command */
  /* Read attribute command
     | ZCL header 3 b | Attr Report 1 XX b | Attr Report 1 XX b | ...

     Attr Report format
     | attr id 2 b |  Attr data type 1 b | attr value XX b |
  */
  /* Construct packet header */
  /* Use buffer specified by input param */
  cmd_data = ZB_ZCL_START_PACKET(param);

  /* NOTE: currently, manufacturer specific is not supported */
  ZB_ZCL_CONSTRUCT_GENERAL_COMMAND_REQ_FRAME_CONTROL_A(
    cmd_data, ZB_ZCL_FRAME_DIRECTION_TO_CLI,
    is_manuf_spec, ZB_ZCL_ENABLE_DEFAULT_RESPONSE);

  if (is_manuf_spec)
  {
    TRACE_MSG(TRACE_ERROR, &amp;quot;rep_info-&amp;gt;manuf_code 0x%x&amp;quot;, (FMT__D, rep_info-&amp;gt;manuf_code));
    ZB_ASSERT(rep_info-&amp;gt;manuf_code != ZB_ZCL_NON_MANUFACTURER_SPECIFIC);

    ZB_ZCL_CONSTRUCT_COMMAND_HEADER_EXT(cmd_data, ZB_ZCL_GET_SEQ_NUM(), ZB_TRUE, rep_info-&amp;gt;manuf_code, ZB_ZCL_CMD_REPORT_ATTRIB);
  }&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;And it looks like ZB_ZCL_MANUF_CODE_INVALID = 0x0000 and ZB_ZCL_NON_MANUFACTURER_SPECIFIC = 0xFFFF. I guess the callstack up until this is a bit different as well. Perhaps the default (if nothing else is specified) manuf_spec code has changed from 0x0000 to 0xFFFF.&amp;nbsp;&lt;/p&gt;
[quote user="pwpot"]AFAIU that single line forces us to give the standard cluster Manufacturer-specific code.&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;[/quote]
&lt;p&gt;But only if&amp;nbsp;&lt;br /&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;is_manuf_spec = !!ZB_ZCL_IS_ATTR_MANUF_SPEC(attr_desc);&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;is true, right?&lt;/p&gt;
&lt;p&gt;Does this return true if you are using a standard cluster as well?&lt;/p&gt;
&lt;p&gt;To me, it looks like if the command is for a manufacturer specific cluster, then it checks whether the manufacturer code is not 0x0000 (in v2.4.0) and not 0xFFFF (in 2.6.0). Are you seeing something else?&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;BR,&lt;/p&gt;
&lt;p&gt;Edvin&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: [Zigbee] Manufacturer Code clarification</title><link>https://devzone.nordicsemi.com/thread/474363?ContentTypeID=1</link><pubDate>Mon, 18 Mar 2024 14:12:41 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:c60bfe67-02c4-4c53-933e-dcc126f33faa</guid><dc:creator>Pawel(embeddedsolutions.pl)</dc:creator><description>&lt;p&gt;Hi Edvin,&lt;/p&gt;
&lt;p&gt;Thank you for the detailed description.&lt;/p&gt;
&lt;p&gt;I am a little bit unsure about the manufacturer-specific attribute within the standard cluster scenario in terms of attribute reporting.&lt;/p&gt;
&lt;p&gt;See&amp;nbsp;&lt;em&gt;&lt;strong&gt;zb_zcl_send_report_attr_command&lt;/strong&gt;&amp;nbsp;&lt;/em&gt;function:&amp;nbsp;&lt;br /&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;void zb_zcl_send_report_attr_command(zb_zcl_reporting_info_t *rep_info, zb_uint8_t param)
{
  zb_uint8_t *cmd_data;
  zb_zcl_reporting_info_t *cur_rep_info;
  zb_zcl_attr_t *attr_desc;
  zb_uint16_t bytes_avail;
  zb_uint8_t attr_size;
  zb_uint8_t send_mode;
  zb_uint8_t is_manuf_spec;

  TRACE_MSG(
      TRACE_ZCL1,
      &amp;quot;&amp;gt;&amp;gt; zb_zcl_send_report_attr_command rep_info %p, param %hd&amp;quot;,
      (FMT__P_H, rep_info, param));

  attr_desc =
    zb_zcl_get_attr_desc_a(rep_info-&amp;gt;ep, rep_info-&amp;gt;cluster_id, rep_info-&amp;gt;cluster_role, rep_info-&amp;gt;attr_id);

  is_manuf_spec = !!ZB_ZCL_IS_ATTR_MANUF_SPEC(attr_desc);

  /* ZCL spec, 2.4.11 Report Attributes Command */
  /* Read attribute command
     | ZCL header 3 b | Attr Report 1 XX b | Attr Report 1 XX b | ...

     Attr Report format
     | attr id 2 b |  Attr data type 1 b | attr value XX b |
  */
  /* Construct packet header */
  /* Use buffer specified by input param */
  cmd_data = ZB_ZCL_START_PACKET(param);

  /* NOTE: currently, manufacturer specific is not supported */
  ZB_ZCL_CONSTRUCT_GENERAL_COMMAND_REQ_FRAME_CONTROL_A(
    cmd_data, ZB_ZCL_FRAME_DIRECTION_TO_CLI,
    is_manuf_spec, ZB_ZCL_ENABLE_DEFAULT_RESPONSE);

  if (is_manuf_spec)
  {
    zb_af_endpoint_desc_t *ep_desc = zb_af_get_endpoint_desc(rep_info-&amp;gt;ep);
    zb_zcl_cluster_desc_t *cluster_desc = get_cluster_desc(ep_desc, rep_info-&amp;gt;cluster_id, rep_info-&amp;gt;cluster_role);

    ZB_ASSERT(ep_desc &amp;amp;&amp;amp; cluster_desc &amp;amp;&amp;amp; cluster_desc-&amp;gt;manuf_code != ZB_ZCL_MANUF_CODE_INVALID);

    ZB_ZCL_CONSTRUCT_COMMAND_HEADER_EXT(cmd_data, ZB_ZCL_GET_SEQ_NUM(), ZB_TRUE, cluster_desc-&amp;gt;manuf_code, ZB_ZCL_CMD_REPORT_ATTRIB);
  }
  else
  {
    ZB_ZCL_CONSTRUCT_COMMAND_HEADER(cmd_data, ZB_ZCL_GET_SEQ_NUM(), ZB_ZCL_CMD_REPORT_ATTRIB);
  }

  cur_rep_info = rep_info;

  while (cur_rep_info)
  {
    attr_desc =
      zb_zcl_get_attr_desc_a(cur_rep_info-&amp;gt;ep, cur_rep_info-&amp;gt;cluster_id, cur_rep_info-&amp;gt;cluster_role, cur_rep_info-&amp;gt;attr_id);
    TRACE_MSG(TRACE_ZCL3, &amp;quot;attr_desc %p&amp;quot;, (FMT__P, attr_desc));

    /* attribute description could not be absent, it is checked while accepting configure report
       command */
    ZB_ASSERT(attr_desc);

    bytes_avail = ZB_ZCL_GET_BYTES_AVAILABLE(param, cmd_data,
                                             cur_rep_info-&amp;gt;dst.profile_id, cur_rep_info-&amp;gt;cluster_id);
    TRACE_MSG(TRACE_ZCL3, &amp;quot;bytes_avail %hd&amp;quot;, (FMT__H, bytes_avail));

    TRACE_MSG(
        TRACE_ZCL3,
        &amp;quot;attribute: id 0x%x, type 0x%hx&amp;quot;,
        (FMT__D_H, attr_desc-&amp;gt;id, attr_desc-&amp;gt;type));
    attr_size = zb_zcl_get_attribute_size(attr_desc-&amp;gt;type, attr_desc-&amp;gt;data_p);
    TRACE_MSG(TRACE_ZCL3, &amp;quot;attr_size %hd&amp;quot;, (FMT__H, attr_size));

    /* Decrement read attr response by sizeof(zb_uint8_t), because attr value size is
     * calculated separately by attr_size  */
    if (bytes_avail &amp;gt;= (sizeof(zb_zcl_report_attr_req_t) - sizeof(zb_uint8_t) + attr_size))
    {
      ZB_ZCL_PACKET_PUT_DATA16_VAL(cmd_data, attr_desc-&amp;gt;id);
      ZB_ZCL_PACKET_PUT_DATA8(cmd_data, attr_desc-&amp;gt;type);
      cmd_data = zb_zcl_put_attribute_value(cmd_data, attr_desc, attr_desc-&amp;gt;data_p, attr_size);

      zb_zcl_save_reported_value(cur_rep_info, attr_desc);

      ZB_ZCL_CLR_REPORTING_FLAG(cur_rep_info, ZB_ZCL_REPORT_ATTR);
      ZB_ZCL_CLR_REPORTING_FLAG(cur_rep_info, ZB_ZCL_REPORT_IS_ALLOWED);
      ZB_ZCL_CLR_REPORTING_FLAG(cur_rep_info, ZB_ZCL_REPORT_TIMER_STARTED);
      ZB_ZCL_SET_REPORTING_FLAG(cur_rep_info, ZB_ZCL_REPORT_IS_SENT);
    }
    else
    {
      TRACE_MSG(TRACE_ZCL1, &amp;quot;ERROR, buffer is full&amp;quot;, (FMT__0));
      break;
    }

    /* get next report info for sending report to the same remote device */
    cur_rep_info = zb_zcl_get_next_reporting_info(rep_info, is_manuf_spec);
    TRACE_MSG(TRACE_ZCL1, &amp;quot;cur_rep_info %p&amp;quot;, (FMT__P, cur_rep_info));
  }

  /* We should always use bindings for reporting (ZCL8, 2.5.7.1.2; ZCL8, 2.5.11.2) */
  send_mode = ZB_APS_ADDR_MODE_DST_ADDR_ENDP_NOT_PRESENT;
  TRACE_MSG(TRACE_ZCL1, &amp;quot;ZCL_REPORT send mode ZB_APS_ADDR_MODE_DST_ADDR_ENDP_NOT_PRESENT:&amp;quot;, (FMT__0));

  ZB_ZCL_FINISH_N_SEND_PACKET(param, cmd_data,
      rep_info-&amp;gt;dst.short_addr,
      send_mode,
      rep_info-&amp;gt;dst.endpoint,
      rep_info-&amp;gt;ep /* src ep */,
      rep_info-&amp;gt;dst.profile_id,
      rep_info-&amp;gt;cluster_id,
      zb_zcl_reporting_cb);

  TRACE_MSG(TRACE_ZCL1, &amp;quot;&amp;lt;&amp;lt; zb_zcl_send_report_attr_command &amp;quot;, (FMT__0));
}&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Especially that part :&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt; if (is_manuf_spec)
  {
    zb_af_endpoint_desc_t *ep_desc = zb_af_get_endpoint_desc(rep_info-&amp;gt;ep);
    zb_zcl_cluster_desc_t *cluster_desc = get_cluster_desc(ep_desc, rep_info-&amp;gt;cluster_id, rep_info-&amp;gt;cluster_role);

    ZB_ASSERT(ep_desc &amp;amp;&amp;amp; cluster_desc &amp;amp;&amp;amp; cluster_desc-&amp;gt;manuf_code != ZB_ZCL_MANUF_CODE_INVALID);

    ZB_ZCL_CONSTRUCT_COMMAND_HEADER_EXT(cmd_data, ZB_ZCL_GET_SEQ_NUM(), ZB_TRUE, cluster_desc-&amp;gt;manuf_code, ZB_ZCL_CMD_REPORT_ATTRIB);
  }&lt;/pre&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;strong&gt;&lt;em&gt;is_manuf_spec&amp;nbsp;&lt;/em&gt;&lt;/strong&gt;&lt;em&gt;&lt;/em&gt;is determined based on the attribute descriptor.&lt;/p&gt;
&lt;p&gt;Assuming the manufacturer-specific attribute within the standard cluster has a REPORTING access set, then we have to pass the ASSERT condition which is:&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;ZB_ASSERT(ep_desc &amp;amp;&amp;amp; cluster_desc &amp;amp;&amp;amp; cluster_desc-&amp;gt;manuf_code != ZB_ZCL_MANUF_CODE_INVALID)&lt;/pre&gt;AFAIU that single line forces us to give the standard cluster Manufacturer-specific code.&lt;/p&gt;
&lt;p&gt;Let me know what you think.&lt;/p&gt;
&lt;p&gt;Maybe things changed in NCS 2.6.0 and we are not aligned :)&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I am looking forward to hearing from you&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: [Zigbee] Manufacturer Code clarification</title><link>https://devzone.nordicsemi.com/thread/473675?ContentTypeID=1</link><pubDate>Wed, 13 Mar 2024 13:56:35 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:dd9209c4-6413-4dbd-8ed0-993f0cda80fa</guid><dc:creator>Edvin</dc:creator><description>&lt;p&gt;Hello Pawel,&lt;/p&gt;
&lt;p&gt;After consulting with our Zigbee team, this is what I got:&lt;/p&gt;
&lt;p&gt;----------------------------&lt;/p&gt;
&lt;p&gt;&lt;em&gt;You need to use manufacturer code for any manufacturer specific extension. &lt;/em&gt;&lt;br /&gt;&lt;em&gt;As the spec (ZCL8 ch. 2.3.3) states, you can extend the standard in the following ways:&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Add manufacturer specific clusters to a standard device endpoint.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Add manufacturer specific commands to a standard cluster.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Add manufacturer specific attributes to a standard cluster.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;In all cases, you need to specify that the extension is manufacturer specific. So in the customer’s case, they will need to add ZB_ZCL_ATTR_MANUF_SPEC to the manufacturer specific attributes. The cluster itself does not need manufacturer code if it is a standard cluster.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;When it comes to communication, all communication regarding the manufacturer specific extension must be transmitted with the manufacturer sub-field set to 1 and with the manufacturer code. That goes both for the device itself and for remote devices, e.g., a remote device sending a read attributes command to read the manufacturer specific attribute.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;----------------------------&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;I hope this helps. Basically, all custom clusters, commands and attributes needs to set the manufacturer sub-field to 1, and use the manufacturer code that corresponds with this feature.&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Edvin&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: [Zigbee] Manufacturer Code clarification</title><link>https://devzone.nordicsemi.com/thread/473215?ContentTypeID=1</link><pubDate>Mon, 11 Mar 2024 13:57:51 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:418d746d-aaac-4332-8052-1e9908dd2ef6</guid><dc:creator>Edvin</dc:creator><description>&lt;p&gt;Hello Pawel,&lt;/p&gt;
&lt;p&gt;I am terribly sorry for the delayed reply.&amp;nbsp;&lt;/p&gt;
[quote user="pwpot"]I couldn&amp;#39;t find any information regarding this. I think &lt;strong&gt;Option 2&lt;/strong&gt; is incorrect, and we should consider Options &lt;strong&gt;1&lt;/strong&gt; and &lt;strong&gt;3.&lt;/strong&gt;[/quote]
&lt;p&gt;&lt;span&gt;I agree. But I will forward this to out Zigbee team for sanity checking.&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: [Zigbee] Manufacturer Code clarification</title><link>https://devzone.nordicsemi.com/thread/471492?ContentTypeID=1</link><pubDate>Thu, 29 Feb 2024 10:30:45 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:e3d0c2e3-5b7d-4044-b4e4-5127510fd755</guid><dc:creator>Pawel(embeddedsolutions.pl)</dc:creator><description>&lt;p&gt;I have changed the&amp;nbsp;&lt;/p&gt;
&lt;div&gt;&lt;span&gt;#define&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;ZB_MANUFACTURER_CODE_DSR&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;0x1234U&lt;br /&gt;to some dummy value but still Node Descriptor was showing 0x1234. It seems that ZBOSS uses 0x1234 as default internally anyway but I have got good news :) I found following API in zboss_api.h :&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;div&gt;
&lt;div&gt;&lt;span&gt;&lt;pre class="ui-code" data-mode="c_cpp"&gt;/**
 * Set Manufacturer code of Node Descriptor Request
 *
 * @param manuf_code - manufacturer code to set
 * @param cb         - callback that is called after manufacturer code setting
*/
void zb_set_node_descriptor_manufacturer_code_req(zb_uint16_t manuf_code, zb_set_manufacturer_code_cb_t cb);&lt;/pre&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;I call it in zboss_signal_handler on signal&amp;nbsp;ZB_ZDO_SIGNAL_SKIP_STARTUP indicating that the stack is ready.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;Callback returns RET_OK and Node Descriptor contains my custom&amp;nbsp;Manufacturer Code, so I think the problem is solved.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;Now I am waiting for your answer regarding dealing with Manufacturer-specific ZCL clusters, commands, and attributes and we are done&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;Regards,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;Pawel&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: [Zigbee] Manufacturer Code clarification</title><link>https://devzone.nordicsemi.com/thread/471484?ContentTypeID=1</link><pubDate>Thu, 29 Feb 2024 09:27:26 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:e5394bda-de61-4833-baf4-6021fc864be7</guid><dc:creator>Pawel(embeddedsolutions.pl)</dc:creator><description>&lt;p&gt;I understand. I will experiment more with the manufacturer codes to come up with some conclusions. Then, I will try to prepare a sample app for you, as the entire project is quite extensive.&lt;/p&gt;
&lt;p&gt;In the meantime, could you please answer the questions below?&lt;/p&gt;
&lt;p&gt;I would like to ensure correctness in dealing with Manufacturer-specific ZCL clusters, commands, and attributes. I aim to be consistent with the ZCL Specification and NCS throughout the process.&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;&lt;em&gt;&lt;strong&gt;For standardizing ZCL clusters (e.g., Basic, Metering, etc.) and custom attributes within, I am considering the following options:&lt;/strong&gt;&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Option 1:&lt;/strong&gt; The custom attribute has ZB_ZCL_ATTR_MANUF_SPEC access set, implying that the Cluster Descriptor should contain the Manufacturer code. Other devices in the network should then use the ZCL Header with the Manufacturer Specific bit set, along with the Manufacturer Code placed in the header, to perform ZCL:AttrWrite, ZCL:AttrRead, ZCL:ConfigureReporting on that attribute. I assume standard attributes should be accessed without the Manufacturer Specific bit and without the Manufacturer Code.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Option 2:&lt;/strong&gt; The custom attribute has ZB_ZCL_ATTR_MANUF_SPEC set, but the Cluster Descriptor does not need to use the Manufacturer Code and be Manufacturer-specific. Other devices in the network should use the ZCL Header with the Manufacturer Specific bit set, along with the Manufacturer Code in the header, to perform ZCL:AttrWrite, ZCL:AttrRead, ZCL:ConfigureReporting on that attribute. I assume standard attributes should be accessed without the Manufacturer Specific bit and without the Manufacturer Code.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Option 3:&lt;/strong&gt; The custom attribute does not have ZB_ZCL_ATTR_MANUF_SPEC access set, and the Cluster Descriptor does not need to use the Manufacturer Code and be Manufacturer-specific. Other devices in the network should use a simple ZCL Header without the Manufacturer Specific bit and without the Manufacturer code.&lt;/p&gt;
&lt;p&gt;I couldn&amp;#39;t find any information regarding this. I think &lt;strong&gt;Option 2&lt;/strong&gt; is incorrect, and we should consider Options &lt;strong&gt;1&lt;/strong&gt; and &lt;strong&gt;3.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration:underline;"&gt;&lt;em&gt;&lt;strong&gt;For a custom ZCL Cluster with custom attributes within:&lt;/strong&gt;&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;All attributes have ZB_ZCL_ATTR_MANUF_SPEC access set, and the Cluster Descriptor contains the Manufacturer Code. Other devices in the network should then use the ZCL Header with the Manufacturer Specific bit set, along with the Manufacturer Code in the header, to perform ZCL:AttrWrite, ZCL:AttrRead, ZCL:ConfigureReporting on these attributes.&lt;/p&gt;
&lt;p&gt;Does this approach sound correct?&lt;/p&gt;
&lt;p&gt;I am looking forward to hearing from you.&lt;/p&gt;
&lt;p&gt;Pawel&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: [Zigbee] Manufacturer Code clarification</title><link>https://devzone.nordicsemi.com/thread/471473?ContentTypeID=1</link><pubDate>Thu, 29 Feb 2024 08:42:56 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:26ff7731-a519-4f73-9278-e4c0f58ab656</guid><dc:creator>Edvin</dc:creator><description>&lt;p&gt;I didn&amp;#39;t try to capture a sniffer trace, but I tried building the paplication after commenting out the ZB_MANUFACTURER_CODE_DSR and ZB_DEFAULT_MANUFACTURER CODE from zb_config_common.h, but perhaps it defaults to 0x1234 if t is not present. I tried building the basic light bulb/switch/coordinator trio, but I guess the bulb doesn&amp;#39;t provide a manufacturer code, since it is not a custom cluster.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Can you try to insert your own manufacturer code in zb_config_common.h (ncs\nrfxlib\zboss\development\include\zb_config_common.h or ncs\nrfxlib\zboss\production\include\zb_config_common.h. Whichever you are using), and see if you are able to change it at all?&lt;/p&gt;
&lt;p&gt;I understand your wish to do so without forking out of NCS, but I just want to check whether this instance of&amp;nbsp;ZB_MANUFACTURER_CODE_DSR is being used at all.&lt;/p&gt;
&lt;p&gt;If it is used, would it be possible to upload your application (or a stripped down version of it), so that I can poke around with the manufacturer codes?&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Edvin&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: [Zigbee] Manufacturer Code clarification</title><link>https://devzone.nordicsemi.com/thread/471378?ContentTypeID=1</link><pubDate>Wed, 28 Feb 2024 15:51:43 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:9afcb2a6-4b43-4c4a-9ef0-aec3058f1ba6</guid><dc:creator>Pawel(embeddedsolutions.pl)</dc:creator><description>&lt;p&gt;Hi Edvin,&lt;/p&gt;
&lt;p&gt;Thank you for fast response.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;ZB_DEFAULT_MANUFACTURER_CODE&amp;nbsp;&lt;/strong&gt;is indeed used by the stack.&amp;nbsp;&lt;br /&gt;Manufacturer Code 0x1234 (DSR) is used in Node Descriptor Response as an answer for Nordic Descriptor Request sent from parent device.&amp;nbsp;Have a look on the screenshot below:&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;img style="max-height:240px;max-width:320px;" src="https://devzone.nordicsemi.com/resized-image/__size/640x480/__key/communityserver-discussions-components-files/4/pastedimage1709135164245v1.png" alt=" " /&gt;&lt;br /&gt;&lt;br /&gt;My goal is to have my custom (ofc certified by Zigbee Aliance) manufacturer code everywhere.&amp;nbsp;&lt;br /&gt;I am able to set it in Cluster descriptors and for FOTA purposes in OTA Upgrade cluster as well but it seems that the Node Descriptor Response still uses the DSR Manufacturer Code.&amp;nbsp;&lt;br /&gt;I would like to change &lt;span&gt;ZB_DEFAULT_MANUFACTURER_CODE to custom one without needing to do the fork of NCS.&lt;br /&gt;Is it possible ?&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Thanks in advance,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;Pawel&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: [Zigbee] Manufacturer Code clarification</title><link>https://devzone.nordicsemi.com/thread/471068?ContentTypeID=1</link><pubDate>Tue, 27 Feb 2024 14:34:12 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:f5ed00c3-3497-4950-a5c7-6098fd36718e</guid><dc:creator>Edvin</dc:creator><description>&lt;p&gt;Hello Pawel,&lt;/p&gt;
[quote user=""]What happens if the manufacturer code placed in the OTA Header of the received image is different from the one set on the device (0x127F by default)?[/quote]
&lt;p&gt;According to the &lt;a href="https://developer.nordicsemi.com/nRF_Connect_SDK/doc/latest/nrf/libraries/zigbee/zigbee_fota.html"&gt;Zigbee FOTA library documentation&lt;/a&gt;, the image should only be accepted if the Manufacturer ID of the FOTA header matches, as well as the image type, Hardware version and Firmware version.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Regarding question 3 and 4. I assume it is possible to overwrite it, but I am not sure whether this code is even used at all. Unless the Zboss library (not open source) fetches the ZB_DEFAULT_MANUFACTURER_CODE and uses it, it is not used at all in the nRF Connect SDK. Seeing as it builds just fine without the ZB_DEFAULT_MANUFACTURER_CODE_DSR definition, I believe that isn&amp;#39;t used anywhere. Remember that this library is not used on Nordic devices only. So perhaps it is used by other chip vendors.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;To answer your second question, and all of them, I guess. If you intend to create a custom cluster, you must include a manufacturer_code. Before you start selling it, you need to certify it with the Zigbee Alliance, and for this, you are assigned your own company manufacturer code. So I believe they will tell you to use your custom manufacturer code for your own clusters. And I guess you are free to use either Nordic&amp;#39;s or your own for the FOTA cluster, and as long as you use the same when generating FOTA images, that should work just fine.&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p&gt;Best regards,&lt;/p&gt;
&lt;p&gt;Edvin&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>