Zigbee about QCLI_demo(3)

0.前言

    在zcl_demo.c中定義了很多的全局變量,與cluster和endpoint有關,本文來查看它們之間的關聯關係。

 

1.demo支持的所有cluster

    所有的cluster都使用下面的結構,由ID、名稱、初始化函數、服務端函數和客戶端函數組成。

/* Structure to describe a cluster that can be used by this demo. */
typedef struct ZCL_Cluster_Descriptor_s
{
   uint16_t                        ClusterID;        //cluster的ID
   const char                     *ClusterName;      //cluster的名字
   ZCL_Cluster_Demo_Init_Func_t    InitFunc;         //cluster demo的初始化函數
   ZCL_Cluster_Demo_Create_Func_t  ServerCreateFunc; //爲這個cluster創建一個服務器
   ZCL_Cluster_Demo_Create_Func_t  ClientCreateFunc; //爲這個cluster創建給客戶端
} ZCL_Cluster_Descriptor_t;

    ClusterDescriptorList是所有的cluster的集合,定義了在demo中支持的cluster

/* Descriptor list for all clusters supported by this demo. */
static const ZCL_Cluster_Descriptor_t ClusterDescriptorList[] =
{
   /* ClusterID                                    ClusterName     InitFunc                          ServerCreateFunc                     ClientCreateFunc */
   {QAPI_ZB_CL_CLUSTER_ID_BASIC,                   "Basic",        Initialize_ZCL_Basic_Demo,        NULL,                                ZCL_Basic_Demo_Create_Client},
   {QAPI_ZB_CL_CLUSTER_ID_POWER_CONFIG,            "PowerConfig",  NULL,                             ZCL_PowerConfig_Demo_Create_Server,  ZCL_PowerConfig_Demo_Create_Client},
   {QAPI_ZB_CL_CLUSTER_ID_TEMPERATURE_CONFIG,      "DeviceTemp",   NULL,                             ZCL_DeviceTemp_Demo_Create_Server,   ZCL_DeviceTemp_Demo_Create_Client},
   {QAPI_ZB_CL_CLUSTER_ID_IDENTIFY,                "Identify",     Initialize_ZCL_Identify_Demo,     ZCL_Identify_Demo_Create_Server,     ZCL_Identify_Demo_Create_Client},
   {QAPI_ZB_CL_CLUSTER_ID_GROUPS,                  "Groups",       Initialize_ZCL_Groups_Demo,       ZCL_Groups_Demo_Create_Server,       ZCL_Groups_Demo_Create_Client},
   {QAPI_ZB_CL_CLUSTER_ID_SCENES,                  "Scenes",       Initialize_ZCL_Scenes_Demo,       ZCL_Scenes_Demo_Create_Server,       ZCL_Scenes_Demo_Create_Client},
   {QAPI_ZB_CL_CLUSTER_ID_ONOFF,                   "OnOff",        Initialize_ZCL_OnOff_Demo,        ZCL_OnOff_Demo_Create_Server,        ZCL_OnOff_Demo_Create_Client},
   {QAPI_ZB_CL_CLUSTER_ID_LEVEL_CONTROL,           "LevelControl", Initialize_ZCL_LevelControl_Demo, ZCL_LevelControl_Demo_Create_Server, ZCL_LevelControl_Demo_Create_Client},
   {QAPI_ZB_CL_CLUSTER_ID_ALARMS,                  "Alarms",       Initialize_ZCL_Alarms_Demo,       ZCL_Alarms_Demo_Create_Server,       ZCL_Alarms_Demo_Create_Client},
   {QAPI_ZB_CL_CLUSTER_ID_TIME,                    "Time",         Initialize_ZCL_Time_Demo,         NULL,                                ZCL_Time_Demo_Create_Client},
   {QAPI_ZB_CL_CLUSTER _ID_OTA_UPGRADE,             "OTA",          Initialize_ZCL_OTA_Demo,          ZCL_OTA_Demo_Create_Server,          ZCL_OTA_Demo_Create_Client},
   {QAPI_ZB_CL_CLUSTER_ID_DOORLOCK,                "DoorLock",     Initialize_ZCL_DoorLock_Demo,     ZCL_DoorLock_Demo_Create_Server,     ZCL_DoorLock_Demo_Create_Client},
   {QAPI_ZB_CL_CLUSTER_ID_WINDOW_COVERING,         "WinCover",     Initialize_ZCL_WinCover_Demo,     ZCL_WinCover_Demo_Create_Server,     ZCL_WinCover_Demo_Create_Client},
   {QAPI_ZB_CL_CLUSTER_ID_COLOR_CONTROL,           "ColorControl", Initialize_ZCL_ColorControl_Demo, ZCL_ColorControl_Demo_Create_Server, ZCL_ColorControl_Demo_Create_Client},
   {QAPI_ZB_CL_CLUSTER_ID_THERMOSTAT,              "Thermostat",   Initialize_ZCL_Thermostat_Demo,   ZCL_Thermostat_Demo_Create_Server,   ZCL_Thermostat_Demo_Create_Client},
   {QAPI_ZB_CL_CLUSTER_ID_FAN_CONTROL,             "FanControl",   NULL,                             ZCL_FanControl_Demo_Create_Server,   ZCL_FanControl_Demo_Create_Client},
   {QAPI_ZB_CL_CLUSTER_ID_TEMP_MEASURE,            "TempMeasure",  NULL,                             ZCL_TempMeasure_Demo_Create_Server,  ZCL_TempMeasure_Demo_Create_Client},
   {QAPI_ZB_CL_CLUSTER_ID_OCCUPANCY_SENSING,       "Occupancy",    NULL,                             ZCL_Occupancy_Demo_Create_Server,    ZCL_Occupancy_Demo_Create_Client},
   {QAPI_ZB_CL_CLUSTER_ID_IAS_ZONE,                "IASZone",      Initialize_ZCL_IASZone_Demo,      ZCL_IASZone_Demo_Create_Server,      ZCL_IASZone_Demo_Create_Client},
   {QAPI_ZB_CL_CLUSTER_ID_IAS_ACE,                 "IASAce",       Initialize_ZCL_IASACE_Demo,       ZCL_IASACE_Demo_Create_Server,       ZCL_IASACE_Demo_Create_Client},
   {QAPI_ZB_CL_CLUSTER_ID_IAS_WD,                  "IASWD",        Initialize_ZCL_IASWD_Demo,        ZCL_IASWD_Demo_Create_Server,        ZCL_IASWD_Demo_Create_Client},
   {QAPI_ZB_CL_CLUSTER_ID_BALLAST,                 "Ballast",      NULL,                             ZCL_Ballast_Demo_Create_Server,      ZCL_Ballast_Demo_Create_Client},
   {QAPI_ZB_CL_CLUSTER_ID_ILLUMINANCE,             "Illuminance",  NULL,                             ZCL_Illuminance_Demo_Create_Server,  ZCL_Illuminance_Demo_Create_Client},
   {QAPI_ZB_CL_CLUSTER_ID_RELATIVE_HUMID,          "RelHumid",     NULL,                             ZCL_RelHumid_Demo_Create_Server,     ZCL_RelHumid_Demo_Create_Client},
   {QAPI_ZB_CL_CLUSTER_ID_TOUCHLINK_COMMISSIONING, "Touchlink",    Initialize_ZCL_Touchlink_Demo,    ZCL_Touchlink_Demo_Create_Server,    ZCL_Touchlink_Demo_Create_Client},
   {ZCL_CUSTOM_DEMO_CLUSTER_CLUSTER_ID,            "Custom",       Initialize_ZCL_Custom_Demo,       ZCL_Custom_Demo_Create_Server,       ZCL_Custom_Demo_Create_Client}
};

    總共支持多少個cluster呢?

#define CLUSTER_DECRIPTOR_LIST_SIZE                                     (sizeof(ClusterDescriptorList) / sizeof(ZCL_Cluster_Descriptor_t))

 

2.每個endpoint支持的cluster

    下面的每個數組是按每個endpoint需要使用的cluster組成一個一個整體

static const uint16_t BaseServerClusterList[]                     = {QAPI_ZB_CL_CLUSTER_ID_BASIC, QAPI_ZB_CL_CLUSTER_ID_IDENTIFY};
static const uint16_t BaseClientClusterList[]                     = {QAPI_ZB_CL_CLUSTER_ID_OTA_UPGRADE};
static const uint16_t OnOffLightServerClusterList[]               = {QAPI_ZB_CL_CLUSTER_ID_BASIC, QAPI_ZB_CL_CLUSTER_ID_IDENTIFY, QAPI_ZB_CL_CLUSTER_ID_GROUPS, QAPI_ZB_CL_CLUSTER_ID_SCENES, QAPI_ZB_CL_CLUSTER_ID_ONOFF};
static const uint16_t OnOffLightSwitchClientClusterList[]         = {QAPI_ZB_CL_CLUSTER_ID_IDENTIFY, QAPI_ZB_CL_CLUSTER_ID_GROUPS, QAPI_ZB_CL_CLUSTER_ID_SCENES, QAPI_ZB_CL_CLUSTER_ID_ONOFF};
static const uint16_t DimmableLightServerClusterList[]            = {QAPI_ZB_CL_CLUSTER_ID_BASIC, QAPI_ZB_CL_CLUSTER_ID_IDENTIFY, QAPI_ZB_CL_CLUSTER_ID_GROUPS, QAPI_ZB_CL_CLUSTER_ID_SCENES, QAPI_ZB_CL_CLUSTER_ID_ONOFF, QAPI_ZB_CL_CLUSTER_ID_LEVEL_CONTROL, QAPI_ZB_CL_CLUSTER_ID_BALLAST};
static const uint16_t DimmableLightSwitchClientClusterList[]      = {QAPI_ZB_CL_CLUSTER_ID_IDENTIFY, QAPI_ZB_CL_CLUSTER_ID_GROUPS, QAPI_ZB_CL_CLUSTER_ID_SCENES, QAPI_ZB_CL_CLUSTER_ID_ONOFF, QAPI_ZB_CL_CLUSTER_ID_LEVEL_CONTROL, QAPI_ZB_CL_CLUSTER_ID_BALLAST};
static const uint16_t ColorDimmableLightServerClusterList[]       = {QAPI_ZB_CL_CLUSTER_ID_BASIC, QAPI_ZB_CL_CLUSTER_ID_IDENTIFY, QAPI_ZB_CL_CLUSTER_ID_GROUPS, QAPI_ZB_CL_CLUSTER_ID_SCENES, QAPI_ZB_CL_CLUSTER_ID_ONOFF, QAPI_ZB_CL_CLUSTER_ID_LEVEL_CONTROL, QAPI_ZB_CL_CLUSTER_ID_COLOR_CONTROL};
static const uint16_t ColorDimmableLightSwitchClientClusterList[] = {QAPI_ZB_CL_CLUSTER_ID_IDENTIFY, QAPI_ZB_CL_CLUSTER_ID_GROUPS, QAPI_ZB_CL_CLUSTER_ID_SCENES, QAPI_ZB_CL_CLUSTER_ID_ONOFF, QAPI_ZB_CL_CLUSTER_ID_LEVEL_CONTROL, QAPI_ZB_CL_CLUSTER_ID_COLOR_CONTROL};
static const uint16_t TouchlinkServerServerClusterList[]          = {QAPI_ZB_CL_CLUSTER_ID_BASIC, QAPI_ZB_CL_CLUSTER_ID_IDENTIFY, QAPI_ZB_CL_CLUSTER_ID_GROUPS, QAPI_ZB_CL_CLUSTER_ID_SCENES, QAPI_ZB_CL_CLUSTER_ID_ONOFF, QAPI_ZB_CL_CLUSTER_ID_TOUCHLINK_COMMISSIONING};
static const uint16_t TouchlinkClientClientClusterList[]          = {QAPI_ZB_CL_CLUSTER_ID_IDENTIFY, QAPI_ZB_CL_CLUSTER_ID_GROUPS, QAPI_ZB_CL_CLUSTER_ID_SCENES, QAPI_ZB_CL_CLUSTER_ID_ONOFF, QAPI_ZB_CL_CLUSTER_ID_TOUCHLINK_COMMISSIONING};
static const uint16_t OTAUpgradeServerClusterList[]               = {QAPI_ZB_CL_CLUSTER_ID_BASIC, QAPI_ZB_CL_CLUSTER_ID_IDENTIFY, QAPI_ZB_CL_CLUSTER_ID_OTA_UPGRADE};
static const uint16_t CustomServerServerClusterList[]             = {QAPI_ZB_CL_CLUSTER_ID_BASIC, QAPI_ZB_CL_CLUSTER_ID_IDENTIFY, QAPI_ZB_CL_CLUSTER_ID_SCENES, QAPI_ZB_CL_CLUSTER_ID_ALARMS, ZCL_CUSTOM_DEMO_CLUSTER_CLUSTER_ID};
static const uint16_t CustomClientClientClusterList[]             = {ZCL_CUSTOM_DEMO_CLUSTER_CLUSTER_ID};
static const uint16_t GeneralServerServerClusterList[]            = {QAPI_ZB_CL_CLUSTER_ID_BASIC, QAPI_ZB_CL_CLUSTER_ID_TIME, QAPI_ZB_CL_CLUSTER_ID_IDENTIFY, QAPI_ZB_CL_CLUSTER_ID_ALARMS, QAPI_ZB_CL_CLUSTER_ID_TEMPERATURE_CONFIG, QAPI_ZB_CL_CLUSTER_ID_POWER_CONFIG};
static const uint16_t GeneralClientClientClusterList[]            = {QAPI_ZB_CL_CLUSTER_ID_BASIC, QAPI_ZB_CL_CLUSTER_ID_TIME, QAPI_ZB_CL_CLUSTER_ID_IDENTIFY, QAPI_ZB_CL_CLUSTER_ID_GROUPS, QAPI_ZB_CL_CLUSTER_ID_SCENES, QAPI_ZB_CL_CLUSTER_ID_ALARMS, QAPI_ZB_CL_CLUSTER_ID_TEMPERATURE_CONFIG, QAPI_ZB_CL_CLUSTER_ID_POWER_CONFIG, QAPI_ZB_CL_CLUSTER_ID_OTA_UPGRADE};
static const uint16_t MeasureSensingServerClusterList[]           = {QAPI_ZB_CL_CLUSTER_ID_BASIC, QAPI_ZB_CL_CLUSTER_ID_IDENTIFY, QAPI_ZB_CL_CLUSTER_ID_GROUPS, QAPI_ZB_CL_CLUSTER_ID_TEMP_MEASURE, QAPI_ZB_CL_CLUSTER_ID_OCCUPANCY_SENSING, QAPI_ZB_CL_CLUSTER_ID_ILLUMINANCE, QAPI_ZB_CL_CLUSTER_ID_RELATIVE_HUMID};
static const uint16_t MeasureSensingClientClusterList[]           = {QAPI_ZB_CL_CLUSTER_ID_IDENTIFY, QAPI_ZB_CL_CLUSTER_ID_GROUPS, QAPI_ZB_CL_CLUSTER_ID_TEMP_MEASURE, QAPI_ZB_CL_CLUSTER_ID_OCCUPANCY_SENSING, QAPI_ZB_CL_CLUSTER_ID_ILLUMINANCE, QAPI_ZB_CL_CLUSTER_ID_RELATIVE_HUMID};
static const uint16_t HVACServerClusterList[]                     = {QAPI_ZB_CL_CLUSTER_ID_BASIC, QAPI_ZB_CL_CLUSTER_ID_IDENTIFY, QAPI_ZB_CL_CLUSTER_ID_GROUPS, QAPI_ZB_CL_CLUSTER_ID_THERMOSTAT, QAPI_ZB_CL_CLUSTER_ID_FAN_CONTROL};
static const uint16_t HVACClientClusterList[]                     = {QAPI_ZB_CL_CLUSTER_ID_IDENTIFY, QAPI_ZB_CL_CLUSTER_ID_GROUPS, QAPI_ZB_CL_CLUSTER_ID_THERMOSTAT, QAPI_ZB_CL_CLUSTER_ID_FAN_CONTROL};
static const uint16_t ClosuresServerClusterList[]                 = {QAPI_ZB_CL_CLUSTER_ID_BASIC, QAPI_ZB_CL_CLUSTER_ID_IDENTIFY, QAPI_ZB_CL_CLUSTER_ID_GROUPS, QAPI_ZB_CL_CLUSTER_ID_DOORLOCK, QAPI_ZB_CL_CLUSTER_ID_WINDOW_COVERING};
static const uint16_t ClosuresClientClusterList[]                 = {QAPI_ZB_CL_CLUSTER_ID_IDENTIFY, QAPI_ZB_CL_CLUSTER_ID_GROUPS, QAPI_ZB_CL_CLUSTER_ID_DOORLOCK, QAPI_ZB_CL_CLUSTER_ID_WINDOW_COVERING};
static const uint16_t IASControlServerClusterList[]               = {QAPI_ZB_CL_CLUSTER_ID_BASIC, QAPI_ZB_CL_CLUSTER_ID_IDENTIFY, QAPI_ZB_CL_CLUSTER_ID_GROUPS, QAPI_ZB_CL_CLUSTER_ID_IAS_ACE};
static const uint16_t IASControlClientClusterList[]               = {QAPI_ZB_CL_CLUSTER_ID_IDENTIFY, QAPI_ZB_CL_CLUSTER_ID_GROUPS, QAPI_ZB_CL_CLUSTER_ID_IAS_ZONE, QAPI_ZB_CL_CLUSTER_ID_IAS_WD};
static const uint16_t IASDeviceServerClusterList[]                = {QAPI_ZB_CL_CLUSTER_ID_BASIC, QAPI_ZB_CL_CLUSTER_ID_IDENTIFY, QAPI_ZB_CL_CLUSTER_ID_GROUPS, QAPI_ZB_CL_CLUSTER_ID_IAS_ZONE, QAPI_ZB_CL_CLUSTER_ID_IAS_WD};
static const uint16_t IASDeviceClientClusterList[]                = {QAPI_ZB_CL_CLUSTER_ID_IDENTIFY, QAPI_ZB_CL_CLUSTER_ID_GROUPS, QAPI_ZB_CL_CLUSTER_ID_IAS_ACE};

 

3.這個demo支持的所有endpoint

/* Structure to describe an endpoint that can be created by the demo. */
typedef struct ZCL_Endpoint_Descriptor_s
{
   char           *EndpointName;       //ednpoint的名稱
   uint16_t        DeviceID;           //endpoint的設備ID
   qbool_t         Touchlink;          //與profile ID有關
   uint8_t         ServerClusterCount; //服務器 cluster列表的cluster數量 
   const uint16_t *ServerClusterList;  //endpoint的服務器cluster的列表
   uint8_t         ClientClusterCount; //客戶端cluster列表中cluster的數量 
   const uint16_t *ClientClusterList;  //endpoint的客戶端cluster的列表
} ZCL_Endpoint_Descriptor_t;
static const ZCL_Endpoint_Descriptor_t EndpointDescriptorList[] =
{
   /* EndpointName,           DeviceID,                                  Touchlink, ServerClusterCount, ServerClusterList                          ClientClusterCount, ClientClusterList */
   {"On/Off Light",           QAPI_ZB_CL_DEVICE_ID_ONOFF_LIGHT,          false,     ZCL_EP_DESC_CLUSTER_LIST(OnOffLightServerClusterList),         ZCL_EP_DESC_CLUSTER_LIST(BaseClientClusterList)},
   {"On/Off Light Switch",    QAPI_ZB_CL_DEVICE_ID_ONOFF_LIGHT_SWITCH,   false,     ZCL_EP_DESC_CLUSTER_LIST(BaseServerClusterList),               ZCL_EP_DESC_CLUSTER_LIST(OnOffLightSwitchClientClusterList)},
   {"Dimmable Light",         QAPI_ZB_CL_DEVICE_ID_DIMMABLE_LIGHT,       false,     ZCL_EP_DESC_CLUSTER_LIST(DimmableLightServerClusterList),      ZCL_EP_DESC_CLUSTER_LIST(BaseClientClusterList)},
   {"Dimmer Switch",          QAPI_ZB_CL_DEVICE_ID_DIMMER_SWITCH,        false,     ZCL_EP_DESC_CLUSTER_LIST(BaseServerClusterList),               ZCL_EP_DESC_CLUSTER_LIST(DimmableLightSwitchClientClusterList)},
   {"Color Dimmable Light",   QAPI_ZB_CL_DEVICE_ID_COLOR_DIMMABLE_LIGHT, false,     ZCL_EP_DESC_CLUSTER_LIST(ColorDimmableLightServerClusterList), ZCL_EP_DESC_CLUSTER_LIST(BaseClientClusterList)},
   {"Color Dimmer Switch",    QAPI_ZB_CL_DEVICE_ID_COLOR_DIMMER_SWITCH,  false,     ZCL_EP_DESC_CLUSTER_LIST(BaseServerClusterList),               ZCL_EP_DESC_CLUSTER_LIST(ColorDimmableLightSwitchClientClusterList)},
   {"Touchlink Server",       QAPI_ZB_CL_DEVICE_ID_ONOFF_LIGHT,          true,      ZCL_EP_DESC_CLUSTER_LIST(TouchlinkServerServerClusterList),    ZCL_EP_DESC_CLUSTER_LIST(BaseClientClusterList)},
   {"Touchlink Client",       QAPI_ZB_CL_DEVICE_ID_ONOFF_LIGHT_SWITCH,   true,      ZCL_EP_DESC_CLUSTER_LIST(BaseServerClusterList),               ZCL_EP_DESC_CLUSTER_LIST(TouchlinkClientClientClusterList)},
   {"OTA Upgrade Server",     QAPI_ZB_CL_DEVICE_ID_CONTROL_BRIDGE,       false,     ZCL_EP_DESC_CLUSTER_LIST(OTAUpgradeServerClusterList),         ZCL_EP_DESC_NULL_CLUSTER_LIST},
   {"Custom Server",          0xF010,                                    false,     ZCL_EP_DESC_CLUSTER_LIST(CustomServerServerClusterList),       ZCL_EP_DESC_CLUSTER_LIST(BaseClientClusterList)},
   {"Custom Client",          0xF011,                                    false,     ZCL_EP_DESC_CLUSTER_LIST(BaseServerClusterList),               ZCL_EP_DESC_CLUSTER_LIST(CustomClientClientClusterList)},
   {"General Server",         0xF030,                                    false,     ZCL_EP_DESC_CLUSTER_LIST(GeneralServerServerClusterList),      ZCL_EP_DESC_CLUSTER_LIST(BaseClientClusterList)},
   {"General Client",         0xF031,                                    false,     ZCL_EP_DESC_CLUSTER_LIST(BaseServerClusterList),               ZCL_EP_DESC_CLUSTER_LIST(GeneralClientClientClusterList)},
   {"Measure/Sensing Server", 0xF040,                                    false,     ZCL_EP_DESC_CLUSTER_LIST(MeasureSensingServerClusterList),     ZCL_EP_DESC_CLUSTER_LIST(BaseClientClusterList)},
   {"Measure/Sensing Client", 0xF041,                                    false,     ZCL_EP_DESC_CLUSTER_LIST(BaseServerClusterList),               ZCL_EP_DESC_CLUSTER_LIST(MeasureSensingClientClusterList)},
   {"HVAC Server",            0xF060,                                    false,     ZCL_EP_DESC_CLUSTER_LIST(HVACServerClusterList),               ZCL_EP_DESC_CLUSTER_LIST(BaseClientClusterList)},
   {"HVAC Client",            0xF061,                                    false,     ZCL_EP_DESC_CLUSTER_LIST(BaseServerClusterList),               ZCL_EP_DESC_CLUSTER_LIST(HVACClientClusterList)},
   {"Closures Server",        0xF070,                                    false,     ZCL_EP_DESC_CLUSTER_LIST(ClosuresServerClusterList),           ZCL_EP_DESC_CLUSTER_LIST(BaseClientClusterList)},
   {"Closures Client",        0xF071,                                    false,     ZCL_EP_DESC_CLUSTER_LIST(BaseServerClusterList),               ZCL_EP_DESC_CLUSTER_LIST(ClosuresClientClusterList)},
   {"IAS Control",            0xF080,                                    false,     ZCL_EP_DESC_CLUSTER_LIST(IASControlServerClusterList),         ZCL_EP_DESC_CLUSTER_LIST(IASControlClientClusterList)},
   {"IAS Device",             0xF081,                                    false,     ZCL_EP_DESC_CLUSTER_LIST(IASDeviceServerClusterList),          ZCL_EP_DESC_CLUSTER_LIST(IASDeviceClientClusterList)}
};

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章