Advertisement
tranthudo

WindowCovering.c

Jul 2nd, 2019
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 21.92 KB | None | 0 0
  1. /*****************************************************************************
  2.  *
  3.  * MODULE:             Window Covering Cluster
  4.  *
  5.  * COMPONENT:          WindowCovering.c
  6.  *
  7.  * AUTHOR:             Vesa 'ISO-B' Ylikyl�
  8.  * DESCRIPTION:        WindowCovering Client cluster definition
  9.  *
  10.  * $HeadURL:  $
  11.  *
  12.  * $Revision: 1 $
  13.  *
  14.  * $LastChangedBy: isob $
  15.  *
  16.  * $LastChangedDate: 2019-01-19 12:00:00 +0200 (Sat, 19 Jan 2018) $
  17.  *
  18.  * $Id: WindowCovering.c 1 2019-01-19 10:00:00Z isob $
  19.  *
  20.  ****************************************************************************/
  21.  
  22. /****************************************************************************/
  23. /***        Include files                                                 ***/
  24. /****************************************************************************/
  25. #include <jendefs.h>
  26.  
  27. #include "zps_apl.h"
  28. #include "zps_apl_aib.h"
  29.  
  30. #include "zcl.h"
  31. #include "zcl_customcommand.h"
  32. #include "zcl_options.h"
  33. #include "string.h"
  34. #include "WindowCovering.h"
  35. #include "WindowCovering_internal.h"
  36.  
  37.  
  38. #include "dbg.h"
  39.  
  40. #ifdef DEBUG_CLD_WINDOWCOVERING
  41. #define TRACE_WINDOWCOVERING    TRUE
  42. #else
  43. #define TRACE_WINDOWCOVERING    FALSE
  44. #endif
  45.  
  46. /****************************************************************************/
  47. /***        Macro Definitions                                             ***/
  48. /****************************************************************************/
  49.  
  50. // 2019.06.02 TrungTQ DEL
  51. // #if defined(CLD_WINDOWCOVERING) && !defined(WINDOWCOVERING_CLIENT)
  52. // #error You Must Have WINDOWCOVERING_CLIENT defined in zcl_options.h
  53. // #endif
  54.  
  55. // #ifdef WINDOWCOVERING_SERVER
  56. // #error ZiGate does not support Window Covering Server Cluster
  57. // #endif
  58. // 2019.06.02 TrungTQ END
  59.  
  60. // #define CLD_WINDOWCOVERING
  61.  
  62. /****************************************************************************/
  63. /***        Type Definitions                                              ***/
  64. /****************************************************************************/
  65. // #ifdef CLD_WINDOWCOVERING
  66.  
  67. /****************************************************************************/
  68. /***        Local Function Prototypes                                     ***/
  69. /****************************************************************************/
  70.  
  71. /****************************************************************************/
  72. /***        Exported Variables                                            ***/
  73. /****************************************************************************/
  74.  
  75. /****************************************************************************/
  76. /***        Local Variables                                               ***/
  77. /****************************************************************************/
  78. #ifdef ZCL_COMMAND_DISCOVERY_SUPPORTED
  79.     const tsZCL_CommandDefinition asCLD_WindowCoveringClusterCommandDefinitions[] = {
  80.         {E_CLD_WINDOWCOVERING_CMD_UP_OPEN,                E_ZCL_CF_RX},     /* Mandatory */
  81.         {E_CLD_WINDOWCOVERING_CMD_DOWN_CLOSE,             E_ZCL_CF_RX},     /* Mandatory */
  82.         {E_CLD_WINDOWCOVERING_CMD_STOP,                   E_ZCL_CF_RX},    /* Mandatory */
  83.         {E_CLD_WINDOWCOVERING_CMD_GO_TO_LIFT_VALUE,       E_ZCL_CF_RX},
  84.         {E_CLD_WINDOWCOVERING_CMD_GO_TO_LIFT_PERCENTAGE,  E_ZCL_CF_RX},
  85.         {E_CLD_WINDOWCOVERING_CMD_GO_TO_TILT_VALUE,       E_ZCL_CF_RX},
  86.         {E_CLD_WINDOWCOVERING_CMD_GO_TO_TILT_PERCENTAGE,  E_ZCL_CF_RX}
  87.     };
  88. #endif
  89.  
  90.  
  91. const tsZCL_AttributeDefinition asCLD_WindowCoveringClusterAttributeDefinitions[] = {
  92. #ifdef WINDOWCOVERING_SERVER
  93.     #ifdef CLD_WINDOWCOVERING_ATTR_ID_WINDOW_COVERING_TYPE
  94.     {E_CLD_WINDOWCOVERING_ATTR_ID_WINDOW_COVERING_TYPE,                 E_ZCL_AF_RD,                          E_ZCL_ENUM8,    (uint32)(&((tsCLD_WindowCovering*)(0))->eWindowCoveringType),0},               /* Mandatory  */
  95.     #endif /* CLD_WINDOWCOVERING_ATTR_ID_WINDOW_COVERING_TYPE */
  96.  
  97.     #ifdef CLD_WINDOWCOVERING_ATTR_ID_PHYSICAL_CLOSED_LIMIT_LIFT_CM
  98.     {E_CLD_WINDOWCOVERING_ATTR_ID_PHYSICAL_CLOSED_LIMIT_LIFT_CM,        E_ZCL_AF_RD,                         E_ZCL_UINT16,    (uint32)(&((tsCLD_WindowCovering*)(0))->u16PhysicalClosedLimitLiftCm),0},     /* Optional */
  99.     #endif /* CLD_WINDOWCOVERING_ATTR_ID_PHYSICAL_CLOSED_LIMIT_LIFT_CM */
  100.  
  101.     #ifdef CLD_WINDOWCOVERING_ATTR_ID_PHYSICAL_CLOSED_LIMIT_TILT_DEGREE
  102.     {E_CLD_WINDOWCOVERING_ATTR_ID_PHYSICAL_CLOSED_LIMIT_TILT_DEGREE,    E_ZCL_AF_RD,                         E_ZCL_UINT16,    (uint32)(&((tsCLD_WindowCovering*)(0))->u16PhysicalClosedLimitTiltDegree),0}, /* Optional */
  103.     #endif /* CLD_WINDOWCOVERING_ATTR_ID_PHYSICAL_CLOSED_LIMIT_TILT_DEGREE */
  104.  
  105.     #ifdef CLD_WINDOWCOVERING_ATTR_ID_CURRENT_POSITION_LIFT_CM
  106.     {E_CLD_WINDOWCOVERING_ATTR_ID_CURRENT_POSITION_LIFT_CM,             E_ZCL_AF_RD,                         E_ZCL_UINT16,    (uint32)(&((tsCLD_WindowCovering*)(0))->u16CurrentPositionLiftCm),0},         /* Optional */
  107.     #endif /* CLD_WINDOWCOVERING_ATTR_ID_CURRENT_POSITION_LIFT_CM */
  108.  
  109.     #ifdef CLD_WINDOWCOVERING_ATTR_ID_CURRENT_POSITION_TILT_DEGREE
  110.     {E_CLD_WINDOWCOVERING_ATTR_ID_CURRENT_POSITION_TILT_DEGREE,         E_ZCL_AF_RP,                         E_ZCL_UINT16,    (uint32)(&((tsCLD_WindowCovering*)(0))->u16CurrentPositionTiltDegree),0},     /* Optional */
  111.     #endif /* CLD_WINDOWCOVERING_ATTR_ID_CURRENT_POSITION_TILT_DEGREE */
  112.  
  113.     #ifdef CLD_WINDOWCOVERING_ATTR_ID_NUMBER_OF_ACTUATIONS_LIFT
  114.     {E_CLD_WINDOWCOVERING_ATTR_ID_NUMBER_OF_ACTUATIONS_LIFT,            E_ZCL_AF_RD,                         E_ZCL_UINT16,    (uint32)(&((tsCLD_WindowCovering*)(0))->u16NumberOfActuationsLift),0},        /* Optional */
  115.     #endif /* CLD_WINDOWCOVERING_ATTR_ID_NUMBER_OF_ACTUATIONS_LIFT */
  116.  
  117.     #ifdef CLD_WINDOWCOVERING_ATTR_ID_NUMBER_OF_ACTUATIONS_TILT
  118.     {E_CLD_WINDOWCOVERING_ATTR_ID_NUMBER_OF_ACTUATIONS_TILT,            E_ZCL_AF_RD,                         E_ZCL_UINT16,    (uint32)(&((tsCLD_WindowCovering*)(0))->u16NumberOfActuationsTilt),0},        /* Optional */
  119.     #endif /* CLD_WINDOWCOVERING_ATTR_ID_NUMBER_OF_ACTUATIONS_TILT */
  120.  
  121.     #ifdef CLD_WINDOWCOVERING_ATTR_ID_CONFIG_STATUS
  122.     {E_CLD_WINDOWCOVERING_ATTR_ID_CONFIG_STATUS,                        E_ZCL_AF_RD,                          E_ZCL_BMAP8,    (uint32)(&((tsCLD_WindowCovering*)(0))->u8ConfigStatus),0},                   /* Mandatory  */
  123.     #endif /* CLD_WINDOWCOVERING_ATTR_ID_CONFIG_STATUS */
  124.  
  125.     #ifdef CLD_WINDOWCOVERING_ATTR_ID_CURRENT_POSITION_LIFT_PERCENTAGE
  126.     {E_CLD_WINDOWCOVERING_ATTR_ID_CURRENT_POSITION_LIFT_PERCENTAGE,     (E_ZCL_AF_RD|E_ZCL_AF_RP),            E_ZCL_UINT8,    (uint32)(&((tsCLD_WindowCovering*)(0))->u8CurrentPositionLiftPercentage),0},  /* Mandatory  */
  127.     #endif /* CLD_WINDOWCOVERING_ATTR_ID_CURRENT_POSITION_LIFT_PERCENTAGE */
  128.  
  129.     #ifdef CLD_WINDOWCOVERING_ATTR_ID_CURRENT_POSITION_TILT_PERCENTAGE
  130.     {E_CLD_WINDOWCOVERING_ATTR_ID_CURRENT_POSITION_TILT_PERCENTAGE,     (E_ZCL_AF_RD|E_ZCL_AF_RP),            E_ZCL_UINT8,    (uint32)(&((tsCLD_WindowCovering*)(0))->u8CurrentPositionTiltPercentage),0},   /* Mandatory  */
  131.     #endif /* CLD_WINDOWCOVERING_ATTR_ID_CURRENT_POSITION_TILT_PERCENTAGE */
  132.  
  133.     #ifdef CLD_WINDOWCOVERING_ATTR_ID_INSTALLED_OPEN_LIMIT_LIFT_CM
  134.     {E_CLD_WINDOWCOVERING_ATTR_ID_INSTALLED_OPEN_LIMIT_LIFT_CM,         E_ZCL_AF_RD,                         E_ZCL_UINT16,    (uint32)(&((tsCLD_WindowCovering*)(0))->u16InstalledOpenLimitLiftCm),0},      /* Optional */
  135.     #endif /* CLD_WINDOWCOVERING_ATTR_ID_INSTALLED_OPEN_LIMIT_LIFT_CM */
  136.  
  137.     #ifdef CLD_WINDOWCOVERING_ATTR_ID_INSTALLED_CLOSED_LIMIT_LIFT_CM
  138.     {E_CLD_WINDOWCOVERING_ATTR_ID_INSTALLED_CLOSED_LIMIT_LIFT_CM,       E_ZCL_AF_RD,                         E_ZCL_UINT16,    (uint32)(&((tsCLD_WindowCovering*)(0))->u16InstalledClosedLimitLiftCm),0},    /* Optional */
  139.     #endif /* CLD_WINDOWCOVERING_ATTR_ID_INSTALLED_CLOSED_LIMIT_LIFT_CM */
  140.  
  141.     #ifdef CLD_WINDOWCOVERING_ATTR_ID_INSTALLED_OPEN_LIMIT_TILT_DEGREE
  142.     {E_CLD_WINDOWCOVERING_ATTR_ID_INSTALLED_OPEN_LIMIT_TILT_DEGREE,     E_ZCL_AF_RD,                         E_ZCL_UINT16,    (uint32)(&((tsCLD_WindowCovering*)(0))->u16InstalledOpenLimitTiltDegree),0},  /* Optional */
  143.     #endif /* CLD_WINDOWCOVERING_ATTR_ID_INSTALLED_OPEN_LIMIT_TILT_DEGREE */
  144.  
  145.     #ifdef CLD_WINDOWCOVERING_ATTR_ID_INSTALLED_CLOSED_LIMIT_TILT_DEGREE
  146.     {E_CLD_WINDOWCOVERING_ATTR_ID_INSTALLED_CLOSED_LIMIT_TILT_DEGREE,   E_ZCL_AF_RD,                         E_ZCL_UINT16,    (uint32)(&((tsCLD_WindowCovering*)(0))->u16InstalledClosedLimitTiltDegree),0},        /* Optional */
  147.     #endif /* CLD_WINDOWCOVERING_ATTR_ID_INSTALLED_CLOSED_LIMIT_TILT_DEGREE */
  148.  
  149.     #ifdef CLD_WINDOWCOVERING_ATTR_ID_VELOCITY
  150.     {E_CLD_WINDOWCOVERING_ATTR_ID_VELOCITY,                             (E_ZCL_AF_RD|E_ZCL_AF_WR),           E_ZCL_UINT16,    (uint32)(&((tsCLD_WindowCovering*)(0))->u16Velocity),0},                              /* Optional */
  151.     #endif /* CLD_WINDOWCOVERING_ATTR_ID_VELOCITY */
  152.  
  153.     #ifdef CLD_WINDOWCOVERING_ATTR_ID_ACCELERATION_TIME_LIFT
  154.     {E_CLD_WINDOWCOVERING_ATTR_ID_ACCELERATION_TIME_LIFT,               (E_ZCL_AF_RD|E_ZCL_AF_WR),           E_ZCL_UINT16,    (uint32)(&((tsCLD_WindowCovering*)(0))->u16AccelrationTimeLift),0},                   /* Optional */
  155.     #endif /* CLD_WINDOWCOVERING_ATTR_ID_ACCELERATION_TIME_LIFT */
  156.  
  157.     #ifdef CLD_WINDOWCOVERING_ATTR_ID_DECELERATION_TIME_LIFT
  158.     {E_CLD_WINDOWCOVERING_ATTR_ID_DECELERATION_TIME_LIFT,               (E_ZCL_AF_RD|E_ZCL_AF_WR),           E_ZCL_UINT16,    (uint32)(&((tsCLD_WindowCovering*)(0))->u16DecelerationTimeLift),0},                  /* Optional */
  159.     #endif /* CLD_WINDOWCOVERING_ATTR_ID_DECELERATION_TIME_LIFT */
  160.  
  161.     #ifdef CLD_WINDOWCOVERING_ATTR_ID_MODE
  162.     {E_CLD_WINDOWCOVERING_ATTR_ID_MODE,                                 (E_ZCL_AF_RD|E_ZCL_AF_WR),            E_ZCL_BMAP8,    (uint32)(&((tsCLD_WindowCovering*)(0))->u8Mode),0},                                   /* Mandatory  */
  163.     #endif /* CLD_WINDOWCOVERING_ATTR_ID_MODE */
  164.  
  165.     #ifdef CLD_WINDOWCOVERING_ATTR_ID_INTERMEDIATE_SETPOINTS_LIFT
  166.     {E_CLD_WINDOWCOVERING_ATTR_ID_INTERMEDIATE_SETPOINTS_LIFT,          (E_ZCL_AF_RD|E_ZCL_AF_WR),            E_ZCL_CSTRING,  (uint32)(&((tsCLD_WindowCovering*)(0))->sIntermediateSetpointsLift),0},               /* Optional  */
  167.     #endif /* CLD_WINDOWCOVERING_ATTR_ID_INTERMEDIATE_SETPOINTS_LIFT */
  168.  
  169.     #ifdef CLD_WINDOWCOVERING_ATTR_ID_INTERMEDIATE_SETPOINTS_TILT
  170.     {E_CLD_WINDOWCOVERING_ATTR_ID_INTERMEDIATE_SETPOINTS_TILT,          (E_ZCL_AF_RD|E_ZCL_AF_WR),            E_ZCL_CSTRING,  (uint32)(&((tsCLD_WindowCovering*)(0))->sIntermediateSetpointsTilt),0},               /* Optional  */
  171.     #endif /* CLD_WINDOWCOVERING_ATTR_ID_INTERMEDIATE_SETPOINTS_TILT */
  172.  
  173. #endif /* WINDOWCOVERING_SERVER */
  174.  
  175.     {E_CLD_GLOBAL_ATTR_ID_CLUSTER_REVISION,                             (E_ZCL_AF_RD|E_ZCL_AF_GA),            E_ZCL_UINT16,   (uint32)(&((tsCLD_WindowCovering*)(0))->u16ClusterRevision),0},               /* Mandatory  */
  176. };
  177.  
  178. tsZCL_ClusterDefinition sCLD_WindowCovering = {
  179.         CLOSURE_CLUSTER_ID_WINDOWCOVERING,
  180.         FALSE,
  181.         E_ZCL_SECURITY_NETWORK,
  182.         (sizeof(asCLD_WindowCoveringClusterAttributeDefinitions) / sizeof(tsZCL_AttributeDefinition)),
  183.         (tsZCL_AttributeDefinition*)asCLD_WindowCoveringClusterAttributeDefinitions,
  184.         NULL
  185. #ifdef ZCL_COMMAND_DISCOVERY_SUPPORTED
  186.         ,
  187.         (sizeof(asCLD_WindowCoveringClusterCommandDefinitions) / sizeof(tsZCL_CommandDefinition)),
  188.         (tsZCL_CommandDefinition*)asCLD_WindowCoveringClusterCommandDefinitions
  189. #endif
  190. };
  191. uint8 au8WindowCoveringAttributeControlBits[(sizeof(asCLD_WindowCoveringClusterAttributeDefinitions) / sizeof(tsZCL_AttributeDefinition))];
  192.  
  193. /****************************************************************************/
  194. /***        Exported Functions                                            ***/
  195. /****************************************************************************/
  196.  
  197. /****************************************************************************
  198.  **
  199.  ** NAME:       eCLD_WindowCoveringCreateWindowCovering
  200.  **
  201.  ** DESCRIPTION:
  202.  ** Creates a Window Covering cluster
  203.  **
  204.  ** PARAMETERS:                 Name                                Usage
  205.  ** tsZCL_ClusterInstance      *psClusterInstance                   Cluster structure
  206.  ** bool_t                      bIsServer                           Server Client flag
  207.  ** tsZCL_ClusterDefinition    *psClusterDefinition                 Cluster Definition
  208.  ** void                       *pvEndPointSharedStructPtr           EndPoint Shared Structure
  209.  ** uint8                      *pu8AttributeControlBits             Attribute Control Bits
  210.  **
  211.  ** RETURN:
  212.  ** teZCL_Status
  213.  **
  214.  ****************************************************************************/
  215. PUBLIC  teZCL_Status eCLD_WindowCoveringCreateWindowCovering(
  216.     tsZCL_ClusterInstance                   *psClusterInstance,
  217.     bool_t                                  bIsServer,
  218.     tsZCL_ClusterDefinition                 *psClusterDefinition,
  219.     void                                    *pvEndPointSharedStructPtr,
  220.     uint8                                   *pu8AttributeControlBits,
  221.     // 2019.06.07 TrungTQ ADD
  222.     tsCLD_WindowCoveringCustomDataStructure *psCustomDataStructure
  223.     // 2019.06.07 TrungTQ END
  224. ) {
  225. #ifdef STRICT_PARAM_CHECK
  226.     /* Parameter check */
  227.     if ((psClusterInstance == NULL) || (psClusterDefinition == NULL)) {
  228.         return E_ZCL_ERR_PARAMETER_NULL;
  229.     }
  230. #endif /* STRICT_PARAM_CHECK */
  231.  
  232.     // cluster data
  233.     vZCL_InitializeClusterInstance(
  234.                         psClusterInstance,
  235.                         bIsServer,
  236.                         psClusterDefinition,
  237.                         pvEndPointSharedStructPtr,
  238.                         pu8AttributeControlBits,
  239.                         psCustomDataStructure,
  240.                         eCLD_WindowCoveringCommandHandler);
  241.  
  242. #ifdef WINDOWCONVERING_SERVER
  243.     // 2019.06.07 TrungTQ ADD
  244.     psCustomDataStructure->sCustomCallBackEvent.eEventType = E_ZCL_CBET_CLUSTER_CUSTOM;
  245.     psCustomDataStructure->sCustomCallBackEvent.uMessage.sClusterCustomMessage.u16ClusterId = psClusterDefinition->u16ClusterEnum;
  246.     psCustomDataStructure->sCustomCallBackEvent.uMessage.sClusterCustomMessage.pvCustomData = (void *)&psCustomDataStructure->sCallBackMessage;
  247.     psCustomDataStructure->sCustomCallBackEvent.psClusterInstance = psClusterInstance;
  248.  
  249.     /* Window Convering Transition State */
  250.     psCustomDataStructure->sTransition.eTransition = E_CLD_WINDOWCOVERING_TRANSITION_STOP;
  251.  
  252.     #if (defined CLD_WINDOWCOVERING_ATTR_ID_CURRENT_POSITION_LIFT_PERCENTAGE) || \
  253.         (defined CLD_WINDOWCOVERING_ATTR_ID_CURRENT_POSITION_TILT_DEGREE)
  254.     psCustomDataStructure->sTransition.u8LastPositionPercentage     = CLD_WINDOWCOVERING_POSITION_PERCENTAGE_MIN;
  255.     psCustomDataStructure->sTransition.u8CurrentPositionPercentage  = CLD_WINDOWCOVERING_POSITION_PERCENTAGE_MIN;
  256.     psCustomDataStructure->sTransition.u8TargetPositionPercentage   = CLD_WINDOWCOVERING_POSITION_PERCENTAGE_MIN;
  257.     #endif
  258.     // 2019.06.07 TrungTQ END
  259. #endif /* WINDOWCONVERING_SERVER */
  260.  
  261.     if (NULL != psClusterInstance->pvEndPointSharedStructPtr) {
  262.         if (bIsServer) {
  263.         // 2019.06.06 TrungTQ ADD
  264. #ifdef WINDOWCOVERING_SERVER
  265.  
  266.     #ifdef CLD_WINDOWCOVERING_ATTR_ID_WINDOW_COVERING_TYPE
  267.             ((tsCLD_WindowCovering*)pvEndPointSharedStructPtr)->eWindowCoveringType = CLD_WINDOWCOVERING_WINDOW_COVERING_TYPE;
  268.     #endif /* CLD_WINDOWCOVERING_ATTR_ID_WINDOW_COVERING_TYPE */
  269.  
  270.     #ifdef CLD_WINDOWCOVERING_ATTR_ID_PHYSICAL_CLOSED_LIMIT_LIFT_CM
  271.             ((tsCLD_WindowCovering*)pvEndPointSharedStructPtr)->u16PhysicalClosedLimitLiftCm = CLD_WINDOWCOVERING_PHYSICAL_CLOSED_LIMIT_LIFT_CM_MAX;
  272.     #endif /* CLD_WINDOWCOVERING_ATTR_ID_PHYSICAL_CLOSED_LIMIT_LIFT_CM */
  273.  
  274.     #ifdef CLD_WINDOWCOVERING_ATTR_ID_PHYSICAL_CLOSED_LIMIT_TILT_DEGREE
  275.             ((tsCLD_WindowCovering*)pvEndPointSharedStructPtr)->u16PhysicalClosedLimitTiltDegree = CLD_WINDOWCOVERING_PHYSICAL_CLOSED_LIMIT_TILT_DEGREE_MAX;
  276.     #endif /* CLD_WINDOWCOVERING_ATTR_ID_PHYSICAL_CLOSED_LIMIT_TILT_DEGREE */
  277.  
  278.     #ifdef CLD_WINDOWCOVERING_ATTR_ID_CURRENT_POSITION_LIFT_CM
  279.             ((tsCLD_WindowCovering*)pvEndPointSharedStructPtr)->u16CurrentPositionLiftCm = CLD_WINDOWCOVERING_INSTALLED_OPEN_LIMIT_LIFT_CM_MIN;
  280.     #endif /* CLD_WINDOWCOVERING_ATTR_ID_CURRENT_POSITION_LIFT_CM */
  281.  
  282.     #ifdef CLD_WINDOWCOVERING_ATTR_ID_CURRENT_POSITION_TILT_DEGREE
  283.             ((tsCLD_WindowCovering*)pvEndPointSharedStructPtr)->u16CurrentPositionTiltDegree = CLD_WINDOWCOVERING_INSTALLED_OPEN_LIMIT_TILT_DEGREE_MIN;
  284.     #endif /* CLD_WINDOWCOVERING_ATTR_ID_CURRENT_POSITION_TILT_DEGREE */
  285.  
  286.     #ifdef CLD_WINDOWCOVERING_ATTR_ID_NUMBER_OF_ACTUATIONS_LIFT
  287.             ((tsCLD_WindowCovering*)pvEndPointSharedStructPtr)->u16NumberOfActuationsLift = CLD_WINDOWCOVERING_NUMBER_OF_ACTUATIONS_LIFT_MIN;
  288.     #endif /* CLD_WINDOWCOVERING_ATTR_ID_NUMBER_OF_ACTUATIONS_LIFT */
  289.  
  290.     #ifdef CLD_WINDOWCOVERING_ATTR_ID_NUMBER_OF_ACTUATIONS_TILT
  291.             ((tsCLD_WindowCovering*)pvEndPointSharedStructPtr)->u16NumberOfActuationsTilt = CLD_WINDOWCOVERING_NUMBER_OF_ACTUATIONS_TILT_MIN;
  292.     #endif /* CLD_WINDOWCOVERING_ATTR_ID_NUMBER_OF_ACTUATIONS_TILT */
  293.  
  294.     #ifdef CLD_WINDOWCOVERING_ATTR_ID_CONFIG_STATUS
  295.             ((tsCLD_WindowCovering*)pvEndPointSharedStructPtr)->u8ConfigStatus = CLD_WINDOWCOVERING_WINDOW_COVERING_CONFIG;
  296.     #endif /* CLD_WINDOWCOVERING_ATTR_ID_CONFIG_STATUS */
  297.  
  298.     #ifdef CLD_WINDOWCOVERING_ATTR_ID_CURRENT_POSITION_LIFT_PERCENTAGE
  299.             ((tsCLD_WindowCovering*)pvEndPointSharedStructPtr)->u8CurrentPositionLiftPercentage = CLD_WINDOWCOVERING_POSITION_LIFT_PERCENTAGE_MIN;
  300.     #endif /* CLD_WINDOWCOVERING_ATTR_ID_CURRENT_POSITION_LIFT_PERCENTAGE */
  301.  
  302.     #ifdef CLD_WINDOWCOVERING_ATTR_ID_CURRENT_POSITION_TILT_PERCENTAGE
  303.             ((tsCLD_WindowCovering*)pvEndPointSharedStructPtr)->u8CurrentPositionTiltPercentage = CLD_WINDOWCOVERING_POSITION_TILT_PERCENTAGE_MIN;
  304.     #endif /* CLD_WINDOWCOVERING_ATTR_ID_CURRENT_POSITION_TILT_PERCENTAGE */
  305.  
  306.             /* Window Covering Settings Attribute */
  307.     #ifdef CLD_WINDOWCOVERING_ATTR_ID_INSTALLED_OPEN_LIMIT_LIFT_CM
  308.             ((tsCLD_WindowCovering*)pvEndPointSharedStructPtr)->u16InstalledOpenLimitLiftCm = CLD_WINDOWCOVERING_INSTALLED_OPEN_LIMIT_LIFT_CM_MAX;
  309.     #endif /* CLD_WINDOWCOVERING_ATTR_ID_INSTALLED_OPEN_LIMIT_LIFT_CM */
  310.  
  311.     #ifdef CLD_WINDOWCOVERING_ATTR_ID_INSTALLED_CLOSED_LIMIT_LIFT_CM
  312.             ((tsCLD_WindowCovering*)pvEndPointSharedStructPtr)->u16InstalledClosedLimitLiftCm = CLD_WINDOWCOVERING_INSTALLED_CLOSED_LIMIT_LIFT_CM_MIN;
  313.     #endif /* CLD_WINDOWCOVERING_ATTR_ID_INSTALLED_CLOSED_LIMIT_LIFT_CM */
  314.  
  315.     #ifdef CLD_WINDOWCOVERING_ATTR_ID_INSTALLED_OPEN_LIMIT_TILT_DEGREE
  316.             ((tsCLD_WindowCovering*)pvEndPointSharedStructPtr)->u16InstalledOpenLimitTiltDegree = CLD_WINDOWCOVERING_INSTALLED_CLOSED_LIMIT_TILT_DEGREE_MAX;
  317.     #endif /* CLD_WINDOWCOVERING_ATTR_ID_INSTALLED_OPEN_LIMIT_TILT_DEGREE */
  318.  
  319.     #ifdef CLD_WINDOWCOVERING_ATTR_ID_INSTALLED_CLOSED_LIMIT_TILT_DEGREE
  320.             ((tsCLD_WindowCovering*)pvEndPointSharedStructPtr)->u16InstalledClosedLimitTiltDegree = CLD_WINDOWCOVERING_INSTALLED_OPEN_LIMIT_TILT_DEGREE_MIN;
  321.     #endif /* CLD_WINDOWCOVERING_ATTR_ID_INSTALLED_CLOSED_LIMIT_TILT_DEGREE */
  322.  
  323.     #ifdef CLD_WINDOWCOVERING_ATTR_ID_VELOCITY
  324.             ((tsCLD_WindowCovering*)pvEndPointSharedStructPtr)->u16Velocity = 0;
  325.     #endif /* CLD_WINDOWCOVERING_ATTR_ID_VELOCITY */
  326.  
  327.     #ifdef CLD_WINDOWCOVERING_ATTR_ID_ACCELERATION_TIME_LIFT
  328.             ((tsCLD_WindowCovering*)pvEndPointSharedStructPtr)->u16AccelrationTimeLift = 0;
  329.     #endif /* CLD_WINDOWCOVERING_ATTR_ID_ACCELERATION_TIME_LIFT */
  330.  
  331.     #ifdef CLD_WINDOWCOVERING_ATTR_ID_DECELERATION_TIME_LIFT
  332.             ((tsCLD_WindowCovering*)pvEndPointSharedStructPtr)->u16DecelerationTimeLift = 0;
  333.     #endif /* CLD_WINDOWCOVERING_ATTR_ID_DECELERATION_TIME_LIFT */
  334.  
  335.     #ifdef CLD_WINDOWCOVERING_ATTR_ID_MODE
  336.             ((tsCLD_WindowCovering*)pvEndPointSharedStructPtr)->u8Mode = 0;
  337.     #endif /* CLD_WINDOWCOVERING_ATTR_ID_MODE */
  338.  
  339.     #ifdef CLD_WINDOWCOVERING_ATTR_ID_INTERMEDIATE_SETPOINTS_LIFT
  340.             ((tsCLD_Basic*)pvEndPointSharedStructPtr)->sIntermediateSetpointsLift.u8MaxLength = sizeof(((tsCLD_Basic*)pvEndPointSharedStructPtr)->sIntermediateSetpointsLift);
  341.             ((tsCLD_Basic*)pvEndPointSharedStructPtr)->sIntermediateSetpointsLift.u8Length = CLD_WINDOWCOVERING_ID_INTERMEDIATE_SETPOINTS_LIFT_SIZE;
  342.             ((tsCLD_Basic*)pvEndPointSharedStructPtr)->sIntermediateSetpointsLift.pu8Data = ((tsCLD_Basic*)pvEndPointSharedStructPtr)->sIntermediateSetpointsLift;
  343.     #endif /* CLD_WINDOWCOVERING_ATTR_ID_INTERMEDIATE_SETPOINTS_LIFT */
  344.  
  345.     #ifdef CLD_WINDOWCOVERING_ATTR_ID_INTERMEDIATE_SETPOINTS_TILT
  346.             ((tsCLD_Basic*)pvEndPointSharedStructPtr)->sIntermediateSetpointsTilt.u8MaxLength = sizeof(((tsCLD_Basic*)pvEndPointSharedStructPtr)->sIntermediateSetpointsTilt);
  347.             ((tsCLD_Basic*)pvEndPointSharedStructPtr)->sIntermediateSetpointsTilt.u8Length = CLD_WINDOWCOVERING_ID_INTERMEDIATE_SETPOINTS_TILT_SIZE;
  348.             ((tsCLD_Basic*)pvEndPointSharedStructPtr)->sIntermediateSetpointsTilt.pu8Data = ((tsCLD_Basic*)pvEndPointSharedStructPtr)->sIntermediateSetpointsTilt;
  349.     #endif /* CLD_WINDOWCOVERING_ATTR_ID_INTERMEDIATE_SETPOINTS_TILT */
  350.  
  351. #endif /* WINDOWCONVERING_SERVER */
  352.         // 2019.06.06 TrungTQ END
  353.         }
  354.  
  355.         ((tsCLD_WindowCovering*)pvEndPointSharedStructPtr)->u16ClusterRevision = CLD_WINDOWCOVERING_CLUSTER_REVISION;
  356.     }
  357.  
  358. #ifdef WINDOWCONVERING_SERVER
  359.     /* As this cluster has reportable attributes enable default reporting */
  360.     if (bIsServer) {
  361.         vZCL_SetDefaultReporting(psClusterInstance);
  362.     }
  363. #endif /* WINDOWCONVERING_SERVER */
  364.  
  365.     return E_ZCL_SUCCESS;
  366. }
  367.  
  368. // #endif   /* #define CLD_WINDOWCOVERING */
  369.  
  370. /****************************************************************************/
  371. /***        END OF FILE                                                   ***/
  372. /****************************************************************************/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement