This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

RTOS/CC2652R: Why ZCL of z-stack don't support Global ( Profile ) Command with Manufacturer Specific?

Part Number: CC2652R
Other Parts Discussed in Thread: Z-STACK,

Tool/software: TI-RTOS

In 《ZigBee Cluster Library Specification Chapter 2 ZigBee Document – 075123》- 2.4.1.1.2, it is introduced that "Manufacturer specific clusters SHALL support global commands". But in file zcl.c of z-stack ( SDK 2.4.0, Z-stack 3.0.2 ), the manufacture specific sub-filed enabled global command will be refused by receiver.

  if ( !interPanMsg && zcl_ProfileCmd( inMsg.hdr.fc.type ) )
  {
    if ( inMsg.hdr.fc.manuSpecific )
    {
      // We don't support any manufacturer specific command
      status = ZCL_STATUS_UNSUP_MANU_GENERAL_COMMAND;
    }
    else if ( ( inMsg.hdr.commandID <= ZCL_CMD_MAX ) &&
              ( zclCmdTable[inMsg.hdr.commandID].pfnParseInProfile != NULL ) )
    {
      zclParseCmd_t parseCmd;

  • Hi Aries,

    The spec says that if this frame control bit is set then the manufacturer code field must be present, but it does not say that setting this bit must be supported. The comment possibly explains that Z-Stack doesn't support manufacturer specific command processing by default because there is no testable implementation for it, however I will have the SW developers provide more details.

    Regards,
    Ryan
  • Hi Aries,

    As Ryan says this section only refers to ZCL frame format and only tells you how to construct a frame around the manufacturer specific sub field, this is not related to support manufacturer specific or not. On the other hand manufacturer specific clusters are not certifiable and that's why you found this piece of code. You can just comment or remove the code to allow Manufacturer Specific.

  • Part Number: CC2652R

    Tool/software: TI-RTOS

    I have fix zcl.c to support manufacturer code, but it only support manufacturer cluster, not support manufacturer attribute. It means that if your device has some manufacturer operation, you should choose some reserved cluster as your own cluster. You don't try to add some new attitude under a ZCL standard cluster.

    1234.zcl.c

    zcl.h

    bdb_reporting.c

    const zclManuCodeTab_t GenericApp_ManuCode[] =
    {
     { 0xFC00, 0x0007 },
    };
    
    void zclGenericApp_RegisterManuCodeTable(void)
    {
      zcl_registerManuCodeTab( GenericApp_ManuCode, sizeof(GenericApp_ManuCode)/sizeof(zclManuCodeTab_t) );
    }