MeshTalos-Client/managed_components/espressif__esp-zboss-lib/include/zcl/zb_zcl_drlc.h
2025-12-03 14:20:11 +08:00

753 lines
38 KiB
C

/*
* Copyright (c) 2012-2022 DSR Corporation, Denver CO, USA
* Copyright (c) 2021-2022 Espressif Systems (Shanghai) PTE LTD
* All rights reserved.
*
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form, except as embedded into a Espressif Systems
* integrated circuit in a product or a software update for such product,
* must reproduce the above copyright notice, this list of conditions and
* the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* 3. Neither the name of the copyright holder nor the names of its contributors
* may be used to endorse or promote products derived from this software without
* specific prior written permission.
*
* 4. Any software provided in binary form under this license must not be reverse
* engineered, decompiled, modified and/or disassembled.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
/* PURPOSE: Demand Response and Load Control cluster definitions
*/
#ifndef ZB_ZCL_DRLC_H_
#define ZB_ZCL_DRLC_H_
#include "zcl/zb_zcl_common.h"
#include "zcl/zb_zcl_commands.h"
/** @cond DOXYGEN_ZCL_SECTION */
/** @addtogroup ZB_ZCL_DRLC
* @{
* @details This cluster provides an interface to the functionality of Smart
* Energy Demand Response and Load Control.
*/
/* Cluster ZB_ZCL_CLUSTER_ID_DRLC */
/** @defgroup ZB_ZCL_DRLC_ATTRS_AND_ENUMS DRLC attributes and enumerations
* @{
* @details
* This section describes DRLC client attributes and common cluster enumerations.
*/
/** @brief Default value for DRLC cluster revision global attribute */
#define ZB_ZCL_DRLC_CLUSTER_REVISION_DEFAULT ((zb_uint16_t)0x0002u)
/** @brief Maximal value for implemented DRLC cluster revision global attribute */
#define ZB_ZCL_DRLC_CLUSTER_REVISION_MAX ZB_ZCL_DRLC_CLUSTER_REVISION_DEFAULT
/** DRLC Client attributes. @see SE spec, subclause D.2.3.2 */
typedef enum zb_zcl_drlc_cli_attr_e
{
ZB_ZCL_ATTR_DRLC_UTILITY_ENROLLMENT_GROUP = 0x0000, /**< UtilityEnrollmentGroup attribute.
* Provides for utilities to assign devices to groups.
*/
ZB_ZCL_ATTR_DRLC_START_RANDOMIZATION_MINUTES = 0x0001, /**< StartRandomizationMinutes attribute.
* Represents the maximum number of minutes to be used
* when randomizing the start of an event.
*/
ZB_ZCL_ATTR_DRLC_DURATION_RANDOMIZATION_MINUTES = 0x0002, /**< DurationRandomizationMinutes attribute.
* Represents the maximum number of minutes to be used
* when randomizing the duration of an event.
*/
ZB_ZCL_ATTR_DRLC_DEVICE_CLASS_VALUE = 0x0003, /**< DeviceClassValue attribute.
* Identifies which bits the device will match in the
* Device Class fields.
*/
} zb_zcl_drlc_cli_attr_t;
/** Criticality Level value applied by the device.
* @see SE spec, Table D-3
*/
typedef enum zb_zcl_drlc_criticality_levels_e
{
ZB_ZCL_DRLC_CRITICALITY_LEVEL_0 = 0x00, /**< Reserved */
ZB_ZCL_DRLC_CRITICALITY_LEVEL_1, /**< Green */
ZB_ZCL_DRLC_CRITICALITY_LEVEL_2, /**< Level 1 */
ZB_ZCL_DRLC_CRITICALITY_LEVEL_3, /**< Level 2 */
ZB_ZCL_DRLC_CRITICALITY_LEVEL_4, /**< Level 3 */
ZB_ZCL_DRLC_CRITICALITY_LEVEL_5, /**< Level 4 */
ZB_ZCL_DRLC_CRITICALITY_LEVEL_6, /**< Level 5 */
ZB_ZCL_DRLC_CRITICALITY_LEVEL_7, /**< Emergency */
ZB_ZCL_DRLC_CRITICALITY_LEVEL_8, /**< Planned Outage */
ZB_ZCL_DRLC_CRITICALITY_LEVEL_9 /**< Service Disconnect */
} zb_zcl_drlc_criticality_levels_t;
/** DRLC device classes enumeration.
* @see SE spec, Table D-2.
*/
typedef enum zb_zcl_drlc_device_class_e
{
ZB_ZCL_DRLC_DEVICE_CLASS_HVAC = 1 << 0, /**< HVAC Compressor or Furnace */
ZB_ZCL_DRLC_DEVICE_CLASS_STRIP_HEATER = 1 << 1, /**< Strip Heaters/Baseboard Heaters */
ZB_ZCL_DRLC_DEVICE_CLASS_WATER_HEATER = 1 << 2, /**< Water Heater */
ZB_ZCL_DRLC_DEVICE_CLASS_POOL_PUMP = 1 << 3, /**< Pool Pump/Spa/Jacuzzi */
ZB_ZCL_DRLC_DEVICE_CLASS_SMART_APPLIANCE = 1 << 4, /**< Smart Appliances */
ZB_ZCL_DRLC_DEVICE_CLASS_IRRIGATION_PUMP = 1 << 5, /**< Irrigation Pump */
ZB_ZCL_DRLC_DEVICE_CLASS_MCI_LOADS = 1 << 6, /**< Managed Commercial & Industrial (C&I) loads */
ZB_ZCL_DRLC_DEVICE_CLASS_SIMPLE_LOADS = 1 << 7, /**< Simple misc. (Residential On/Off) loads */
ZB_ZCL_DRLC_DEVICE_CLASS_EXTERIOR_LIGHTNING = 1 << 8, /**< Exterior Lighting */
ZB_ZCL_DRLC_DEVICE_CLASS_INTERIOR_LIGHTNING = 1 << 9, /**< Interior Lighting */
ZB_ZCL_DRLC_DEVICE_CLASS_ELECTRIC_VEHICLE = 1 << 10, /**< Electric Vehicle */
ZB_ZCL_DRLC_DEVICE_CLASS_GENERATION_SYSTEMS = 1 << 11 /**< Generation Systems */
} zb_zcl_drlc_device_class_t;
/** DRLC Event Status enum
* @see SE spec, Table D-9
*/
typedef enum zb_zcl_drlc_event_status_e
{
ZB_ZCL_DRLC_EVENT_RESERVED_00 = 0x00, /**< Reserved for future use. */
ZB_ZCL_DRLC_EVENT_LCE_RECEIVED, /**< Load Control Event command received */
ZB_ZCL_DRLC_EVENT_EVENT_STARTED, /**< Event started */
ZB_ZCL_DRLC_EVENT_EVENT_COMPLETED, /**< Event completed */
ZB_ZCL_DRLC_EVENT_OPT_OUT, /**< User has chosen to “Opt-Out”, user will not participate in this event */
ZB_ZCL_DRLC_EVENT_OPT_IN, /**< User has chosen to “Opt-In”, user will participate in this event */
ZB_ZCL_DRLC_EVENT_EVENT_CANCELLED, /**< The event has been cancelled */
ZB_ZCL_DRLC_EVENT_EVENT_SUPERSEDED, /**< The event has been superseded */
ZB_ZCL_DRLC_EVENT_EVENT_PARTIALLY_OPT_OUT, /**< Event partially completed with User “Opt-Out”. */
ZB_ZCL_DRLC_EVENT_EVENT_PARTIALLY_OPT_IN, /**< Event partially completed due to User “Opt-In”. */
ZB_ZCL_DRLC_EVENT_EVENT_COMPLETED_NO_USER, /**< Event completed, no User participation (Previous “Opt-Out”). */
ZB_ZCL_DRLC_EVENT_RESERVED_0B, /**< Reserved for future use. */
ZB_ZCL_DRLC_EVENT_RESERVED_F7 = 0xF7, /**< Reserved for future use. */
ZB_ZCL_DRLC_EVENT_REJECTED_INVALID_CANCEL_CMD, /**< Rejected - Invalid Cancel Command (Default) */
ZB_ZCL_DRLC_EVENT_REJECTED_INVALID_EFFECTIVE_TIME, /**< Rejected - Invalid Cancel Command (Invalid Effective Time) */
ZB_ZCL_DRLC_EVENT_RESERVED_FA, /**< Reserved */
ZB_ZCL_DRLC_EVENT_REJECTED_EXPIRED, /**< Rejected - Event was received after it had expired@n (Current Time > Start Time + Duration) */
ZB_ZCL_DRLC_EVENT_RESERVED_FC, /**< Reserved for future use. */
ZB_ZCL_DRLC_EVENT_REJECTED_UNDEFINED_EVENT, /**< Rejected - Invalid Cancel Command (Undefined Event) */
ZB_ZCL_DRLC_EVENT_REJECTED, /**< Load Control Event command Rejected */
ZB_ZCL_DRLC_EVENT_RESERVED_FF /**< Reserved for future use. */
} zb_zcl_drlc_event_status_t;
/** DRLC signature type enum */
typedef enum zb_zcl_drlc_signature_type_e
{
ZB_ZCL_DRLC_LCE_NO_SIGNATURE = 0x00, /**< No Signature */
ZB_ZCL_DRLC_LCE_SIGNATURE_ECDSA, /**< ECDSA */
ZB_ZCL_DRLC_LCE_SIGNATURE_RESERVED /**< Reserved */
} zb_zcl_drlc_signature_type_t;
/** @} */ /* ZB_ZCL_DRLC_ATTRS_AND_ENUMS */
/** @defgroup ZB_ZCL_DRLC_COMMANDS_STRUCTURES_AND_DEFINITIONS DRLC commands
* @{
* @details
* This section describes all commands structures and data payloads.
*/
/** Commands are generated by DRLC Server.
* @see SE spec, Table D-1
*/
typedef enum zb_zcl_drlc_srv_cmd_e
{
ZB_ZCL_DRLC_SRV_CMD_LOAD_CONTROL_EVENT = 0x00, /**< LoadControlEvent is generated when the ESI wants to control one or more
* load control devices usually as the result of an energy curtailment
* command from the Smart Energy Network.
* @see zb_zcl_drlc_lce_payload_s
*/
ZB_ZCL_DRLC_SRV_CMD_CANCEL_LOAD_CONTROL_EVENT = 0x01, /**< CancelLoadControlEvent is generated when the ESI wants to cancel
* previously scheduled control of one or more load control devices, usually
* as the result of an energy curtailment command from the Smart Energy
* Network
* @see zb_zcl_drlc_cancel_lce_payload_s
*/
ZB_ZCL_DRLC_SRV_CMD_CANCEL_ALL_LOAD_CONTROL_EVENTS = 0x02, /**< CancellAllLoadControlEvents is generated when the ESI wants to cancel all
* events for control device(s)
*/
} zb_zcl_drlc_srv_cmd_t;
/** Commands are generated by DRLC Client.
* @see SE spec, Table D-8
*/
typedef enum zb_zcl_drlc_cli_cmd_e
{
ZB_ZCL_DRLC_CLI_CMD_REPORT_EVENT_STATUS = 0x00, /**< ReportEventStatus is generated when the client device detects a change of
* state for an active LoadControl event.
* @see zb_zcl_drlc_report_event_status_payload_s
*/
ZB_ZCL_DRLC_CLI_CMD_GET_SCHEDULED_EVENTS = 0x01, /**< GetScheduledEvents is generated when the client device wishes to verify
* the available LoadControl events.
* @see zb_zcl_drlc_get_scheduled_events_payload_s
*/
} zb_zcl_drlc_cli_cmd_t;
/** @cond internals_doc */
/* DRLC cluster commands list : only for information - do not modify */
#define ZB_ZCL_CLUSTER_ID_DRLC_SERVER_ROLE_GENERATED_CMD_LIST \
ZB_ZCL_DRLC_SRV_CMD_LOAD_CONTROL_EVENT, \
ZB_ZCL_DRLC_SRV_CMD_CANCEL_LOAD_CONTROL_EVENT, \
ZB_ZCL_DRLC_SRV_CMD_CANCEL_ALL_LOAD_CONTROL_EVENTS
#define ZB_ZCL_CLUSTER_ID_DRLC_CLIENT_ROLE_RECEIVED_CMD_LIST ZB_ZCL_CLUSTER_ID_DRLC_SERVER_ROLE_GENERATED_CMD_LIST
#define ZB_ZCL_CLUSTER_ID_DRLC_CLIENT_ROLE_GENERATED_CMD_LIST \
ZB_ZCL_DRLC_CLI_CMD_REPORT_EVENT_STATUS, \
ZB_ZCL_DRLC_CLI_CMD_GET_SCHEDULED_EVENTS
#define ZB_ZCL_CLUSTER_ID_DRLC_SERVER_ROLE_RECEIVED_CMD_LIST ZB_ZCL_CLUSTER_ID_DRLC_CLIENT_ROLE_GENERATED_CMD_LIST
/*! @}
* @endcond */ /* internals_doc */
/* Payload description */
/** @ref ZB_ZCL_DRLC_SRV_CMD_LOAD_CONTROL_EVENT "LoadControlEvent" command payload.
* @see SE spec, Figure D-2
*/
typedef ZB_PACKED_PRE struct zb_zcl_drlc_lce_payload_s {
/** Unique identifier generated by the Energy provider.
* The value of this field allows matching of Event reports
* with a specific Demand Response and Load Control event.
*/
zb_uint32_t issuer_event_id; /* (M) */
/** Bit encoded field representing the Device Class to apply the
* current Load Control Event. Each bit, if set individually or
* in combination, indicates the class device(s) needing to
* participate in the event.
*/
zb_uint16_t device_class; /* (M) */
/** This field can be used in conjunction with the Device Class bits
* for providing a mechanism to direct Load Control Events
* to groups of Devices.
*/
zb_uint8_t utility_enrollment_group; /* (M) */
/** UTC Timestamp representing when the event is scheduled to start.
* A start time of 0x00000000 is a special time denoting “now.”
*/
zb_uint32_t start_time; /* (M) */
/** Duration of this event in number of minutes.
* Maximum value is 1440 (one day).
*/
zb_uint16_t duration_in_minutes; /* (M) */
/** This field defines the level of criticality of event. The
* action for an event can be solely based on this value,
* or combination with other Load Control Event fields.
*/
zb_uint8_t criticality_level; /* (M) */
/** Requested offset to apply to the normal cooling setpoint
* at the time of the start of the event in + 0.1 Celsius.
*/
zb_uint8_t cooling_temperature_offset; /* (O) - use 0xff if optional */
/** Requested offset to apply to the normal heating setpoint
* at the time of the start of the event in + 0.1 Celsius.
*/
zb_uint8_t heating_temperature_offset; /* (O) - use 0xff if optional */
/** Requested cooling set point in 0.01 degrees Celsius. */
zb_int16_t cooling_temperature_set_point; /* (O) - use 0x8000 if optional */
/** Requested heating set point in 0.01 degrees Celsius. */
zb_int16_t heating_temperature_set_point; /* (O) - use 0x8000 if optional */
/** Defines a maximum energy usage limit as a percentage of
* the client implementations specific average energy usage.
*/
zb_int8_t average_load_adjustment_percentage; /* (O) */
/** Defines the maximum on state duty cycle as a percentage of time. */
zb_uint8_t duty_cycle; /* (O) */
/** Identifies additional control options for the event. */
zb_uint8_t event_control; /* (M) */
} ZB_PACKED_STRUCT zb_zcl_drlc_lce_payload_t;
/** @def ZB_ZCL_DRLC_SRV_CMD_LOAD_CONTROL_EVENT_IS_VALID
*/
#define ZB_ZCL_DRLC_SRV_CMD_LOAD_CONTROL_EVENT_IS_VALID(size) \
((size) >= sizeof(zb_zcl_drlc_lce_payload_t))
/** @ref ZB_ZCL_DRLC_SRV_CMD_CANCEL_LOAD_CONTROL_EVENT "CancelLoadControlEvent" command payload
* @see SE spec, Figure D-3
*/
typedef ZB_PACKED_PRE struct zb_zcl_drlc_cancel_lce_payload_s {
/* Mandatory fields. */
/** Unique identifier generated by the Energy provider. The value of
* this field allows matching of Event reports with a specific Demand Response
* and Load Control event.
*/
zb_uint32_t issuer_event_id; /* (M) */
/** Bit encoded field representing the Device Class to apply the
* current Load Control Event. Each bit, if set individually or in combination,
* indicates the class device(s) needing to participate in the event.
*/
zb_uint16_t device_class; /* (M) */
/** This field can be used in conjunction with the Device Class bits
* for providing a mechanism to direct Load Control Events
* to groups of Devices.
*/
zb_uint8_t utility_enrollment_group; /* (M) */
/** This field is used to indicate that the Event is currently in process and
* a cancel command is received.*/
zb_uint8_t cancel_control; /* (M) */
/** UTC Timestamp representing when the canceling of the event is
* scheduled to start. An effective time of 0x00000000 is a special
* time denoting “now.”
*/
zb_uint32_t effective_time; /* (M) */
} ZB_PACKED_STRUCT zb_zcl_drlc_cancel_lce_payload_t;
/** @def ZB_ZCL_DRLC_SRV_CMD_CANCEL_LOAD_CONTROL_EVENT_IS_VALID
*/
#define ZB_ZCL_DRLC_SRV_CMD_CANCEL_LOAD_CONTROL_EVENT_IS_VALID(size) \
((size) >= sizeof(zb_zcl_drlc_cancel_lce_payload_t))
/** @ref ZB_ZCL_DRLC_SRV_CMD_CANCEL_ALL_LOAD_CONTROL_EVENTS "CancelAllLoadControlEvents" command payload
* @see SE spec, Figure D-3
*/
typedef ZB_PACKED_PRE struct zb_zcl_drlc_cancel_alce_payload_s {
/* Mandatory fields. */
/** Where the Cancel Control field indicates that randomization is to be used, the receiving device should first
* check whether Duration Time was to be randomized and, if so, termination of the event should be adjusted
* according to the value of the DurationRandomizationMinutes attribute.
*/
zb_uint8_t cancel_control; /* (M) */
} ZB_PACKED_STRUCT zb_zcl_drlc_cancel_alce_payload_t;
/** @def ZB_ZCL_DRLC_SRV_CMD_CANCEL_ALL_LOAD_CONTROL_EVENTS_IS_VALID
*/
#define ZB_ZCL_DRLC_SRV_CMD_CANCEL_ALL_LOAD_CONTROL_EVENTS_IS_VALID(size) \
((size) >= sizeof(zb_zcl_drlc_cancel_alce_payload_t))
/** @ref ZB_ZCL_DRLC_CLI_CMD_REPORT_EVENT_STATUS "ReportEventStatus" command payload
* @see SE spec, Figure D-5
*/
typedef ZB_PACKED_PRE struct zb_zcl_drlc_report_event_status_payload_s {
/* Mandatory fields. */
/** Unique identifier generated by the Energy provider. The value of
* this field allows matching of Event reports with a specific Demand Response
* and Load Control event.
*/
zb_uint32_t issuer_event_id; /* (M) */
/** This field stores value from set of event statuses*/
zb_uint8_t event_status; /* (M) */
/** UTC Timestamp representing when the event status
* occurred. This field shall not use the value of 0x00000000.
*/
zb_uint32_t event_status_time; /* (M) */
/** Criticality Level value applied by the device */
zb_uint8_t criticality_level_applied; /* (M) */
/** Defines Cooling Temperature Set Point value applied by the device.
* The value 0x8000 means that this field has not been used by the end device.
*/
zb_uint16_t cooling_temperature_set_point_applied; /* (O) */
/** Defines Heating Temperature Set Point value applied by the device.
* The value 0x8000 means that this field has not been used by
* the end device.
*/
zb_uint16_t heating_temperature_set_point_applied; /* (O) */
/** Defines Average Load Adjustment Percentage value applied by the device.
* The value 0x80 means that this field has not been used by the end device.
*/
zb_int8_t average_load_adjustment_percentage_applied; /* (O) */
/** Defines the maximum on state duty cycle applied by the device.
* The value 0xFF means that this field has not been used by the end device.
*/
zb_uint8_t duty_cycle_applied; /* (O) */
/** Identifies additional control options for the event. */
zb_uint8_t event_control; /* (M) */
/** This field is used to enumerate the type of algorithm use to create the signature.*/
zb_uint8_t signature_type; /* (M) */
/** A non-repudiation signature created by using the Matyas-Meyer-Oseas
* hash function used in conjunction with ECDSA.
*/
zb_uint8_t signature[42]; /* (O) */
} ZB_PACKED_STRUCT zb_zcl_drlc_report_event_status_payload_t;
/** @def ZB_ZCL_DRLC_CLI_CMD_REPORT_EVENT_STATUS_IS_VALID
*/
#define ZB_ZCL_DRLC_CLI_CMD_REPORT_EVENT_STATUS_IS_VALID(size) \
((size) >= sizeof(zb_zcl_drlc_report_event_status_payload_t))
/** @ref ZB_ZCL_DRLC_CLI_CMD_GET_SCHEDULED_EVENTS "GetScheduledEvents" command payload
* @see SE spec, Figure D-6
*/
typedef ZB_PACKED_PRE struct zb_zcl_drlc_get_scheduled_events_payload_s {
/* Mandatory fields. */
/** UTC Timestamp representing the minimum Start Time of events that shall be
* matched and sent by the Server. A Start Time of 0x00000000 has no special
* meaning.
*/
zb_uint32_t start_time; /* (M) */
/** Represents the maximum number of events to be sent. A value of 0 indicates
* no maximum limit.
*/
zb_uint8_t number_of_events; /* (M) */
/** Represents the minimum Issuer Event ID of events to be matched and sent
* by the server with the same Start Time as the Get Scheduled Events command.
* A value of 0xFFFFFFFF indicates this field will not be used.
*/
zb_uint32_t issuer_event_id; /* (O) */
} ZB_PACKED_STRUCT zb_zcl_drlc_get_scheduled_events_payload_t;
/** Initialize @ref ZB_ZCL_DRLC_SRV_CMD_LOAD_CONTROL_EVENT "LoadControlEvent" command @ref zb_zcl_drlc_lce_payload_t payload*/
#define ZB_ZCL_DRLC_LCE_PAYLOAD_INIT \
(zb_zcl_drlc_lce_payload_t) \
{ \
.cooling_temperature_offset = 0xFF, \
.heating_temperature_offset = 0xFF, \
.cooling_temperature_set_point = (zb_int16_t) 0x8000, \
.heating_temperature_set_point = (zb_int16_t) 0x8000, \
.average_load_adjustment_percentage = (zb_int8_t) 0x80, \
.duty_cycle = 0xFF, \
}
/** Initialize @ref ZB_ZCL_DRLC_SRV_CMD_CANCEL_LOAD_CONTROL_EVENT "CancelLoadControlEvent" command @ref zb_zcl_drlc_cancel_lce_payload_t payload */
#define ZB_ZCL_DRLC_CANCEL_LCE_PAYLOAD_INIT \
(zb_zcl_drlc_cancel_lce_payload_t) {0}
/** Initialize @ref ZB_ZCL_DRLC_SRV_CMD_CANCEL_ALL_LOAD_CONTROL_EVENTS "CancelAllLoadControlEvents" command @ref zb_zcl_drlc_cancel_alce_payload_t payload */
#define ZB_ZCL_DRLC_CANCEL_ALCE_PAYLOAD_INIT \
(zb_zcl_drlc_cancel_alce_payload_t) {0}
/** Initialize @ref ZB_ZCL_DRLC_CLI_CMD_REPORT_EVENT_STATUS "ReportEventStatus" command @ref zb_zcl_drlc_report_event_status_payload_t payload */
#define ZB_ZCL_DRLC_REPORT_EVENT_STATUS_PAYLOAD_INIT \
(zb_zcl_drlc_report_event_status_payload_t) \
{ \
.cooling_temperature_set_point_applied = (zb_uint16_t) 0x8000, \
.heating_temperature_set_point_applied = (zb_uint16_t) 0x8000, \
.average_load_adjustment_percentage_applied = (zb_int8_t) 0x80, \
.duty_cycle_applied = (zb_uint8_t) 0xFF, \
.signature = \
{ \
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, \
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, \
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, \
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, \
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, \
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, \
0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, \
}, \
}
/** Check if some size in range of variable size of specified payload.
*/
#define ZB_ZCL_DRLC_GET_SCHEDULED_EVENTS_PAYLOAD_SIZE_IS_VALID(size) \
((size) >= ((zb_int16_t)sizeof(zb_zcl_drlc_get_scheduled_events_payload_t) - \
(zb_int16_t)ZB_SIZEOF_FIELD(zb_zcl_drlc_get_scheduled_events_payload_t, issuer_event_id)))
/** Initialize @ref ZB_ZCL_DRLC_CLI_CMD_GET_SCHEDULED_EVENTS "GetScheduledEvents" command @ref zb_zcl_drlc_get_scheduled_events_payload_t payload */
#define ZB_ZCL_DRLC_CMD_GET_SCHEDULED_EVENTS_PAYLOAD_INIT \
(zb_zcl_drlc_get_scheduled_events_payload_t) \
{ \
.issuer_event_id = 0xFFFFFFFF, \
}
/** Function for send @ref ZB_ZCL_DRLC_SRV_CMD_LOAD_CONTROL_EVENT "LoadControlEvent" command.
* On sender's side callback ZCL device callback @ref ZB_ZCL_REGISTER_DEVICE_CB will be called with @ref ZB_ZCL_DRLC_GET_SCHEDULED_EVENTS_CB_ID
* callback id on reception of @ref ZB_ZCL_DRLC_CLI_CMD_GET_SCHEDULED_EVENTS "GetScheduledEvents" command.
* @n On receiver's side callback ZCL device callback @ref ZB_ZCL_REGISTER_DEVICE_CB will be called with
* @ref ZB_ZCL_DRLC_LOAD_CONTROL_EVENT_CB_ID callback id.
* @param param - Reference to buffer.
* @param dst_addr - Address of the device to send command to.
* @param dst_addr_mode - Address mode for dst_addr.
* @param dst_ep - Destination endpoint.
* @param src_ep - Current endpoint.
* @param payload - Packet payload (@ref zb_zcl_drlc_lce_payload_t).
* @param cb - Callback which should be called when the ZCL stack receives APS ack.
* @par Usage
* @n Handle @ref ZB_ZCL_DRLC_GET_SCHEDULED_EVENTS_CB_ID
* @snippet se/energy_service_interface/se_esi_zc.c handle_get_scheduled_events
* @n Example of sending @ref ZB_ZCL_DRLC_SRV_CMD_LOAD_CONTROL_EVENT "LoadControlEvent" command
* @snippet se/energy_service_interface/se_esi_zc.c esi_dev_cmd_send_lce_event1
*/
void zb_drlc_server_send_load_control_event(zb_uint8_t param,
zb_addr_u *dst_addr, zb_aps_addr_mode_t dst_addr_mode, zb_uint8_t dst_ep,
zb_uint8_t src_ep, zb_zcl_drlc_lce_payload_t *payload, zb_callback_t cb);
/** Function for send @ref ZB_ZCL_DRLC_SRV_CMD_CANCEL_LOAD_CONTROL_EVENT "CancelLoadControlEvent" command.
* On receiver's side callback ZCL device callback @ref ZB_ZCL_REGISTER_DEVICE_CB will be called with
* @ref ZB_ZCL_DRLC_CANCEL_LOAD_CONTROL_EVENT_CB_ID
* @param param - Reference to buffer.
* @param dst_addr - Address of the device to send command to.
* @param dst_addr_mode - Address mode for dst_addr.
* @param dst_ep - Destination endpoint.
* @param src_ep - Current endpoint.
* @param payload - Packet payload (@ref zb_zcl_drlc_cancel_lce_payload_t).
* @param cb - Callback which should be called when the ZCL stack receives APS ack.
* @par Usage
* @n Example of sending @ref ZB_ZCL_DRLC_SRV_CMD_CANCEL_LOAD_CONTROL_EVENT "CancelLoadControlEvent" command
* @snippet se/energy_service_interface/se_esi_zc.c esi_dev_cmd_send_lce_event2
*/
void zb_drlc_server_send_cancel_load_control_event(zb_uint8_t param,
zb_addr_u *dst_addr, zb_aps_addr_mode_t dst_addr_mode, zb_uint8_t dst_ep,
zb_uint8_t src_ep, zb_zcl_drlc_cancel_lce_payload_t *payload, zb_callback_t cb);
/** Function for send @ref ZB_ZCL_DRLC_SRV_CMD_CANCEL_ALL_LOAD_CONTROL_EVENTS "CancellAllLoadControlEvents" command.
* On receiver's side callback ZCL device callback @ref ZB_ZCL_REGISTER_DEVICE_CB will be called with
* @ref ZB_ZCL_DRLC_CANCEL_ALL_LOAD_CONTROL_EVENTS_CB_ID
* @param param - Reference to buffer.
* @param dst_addr - Address of the device to send command to.
* @param dst_addr_mode - Address mode for dst_addr.
* @param dst_ep - Destination endpoint.
* @param src_ep - Current endpoint.
* @param payload - Packet payload: pointer to zb_uint8_t, where
* "Cancel Control" field value is placed (see SE spec, D.2.2.3.3.1).
* @param cb - Callback which should be called when the ZCL stack receives APS ack.
* @par Usage
* @n Example of sending @ref ZB_ZCL_DRLC_SRV_CMD_CANCEL_ALL_LOAD_CONTROL_EVENTS "CancellAllLoadControlEvents" command
* @snippet se/energy_service_interface/se_esi_zc.c esi_dev_cmd_send_lce_event3
*/
void zb_drlc_server_send_cancel_all_load_control_events(zb_uint8_t param,
zb_addr_u *dst_addr, zb_aps_addr_mode_t dst_addr_mode, zb_uint8_t dst_ep,
zb_uint8_t src_ep, zb_uint8_t *payload, zb_callback_t cb);
/** Function for send @ref ZB_ZCL_DRLC_CLI_CMD_REPORT_EVENT_STATUS "ReportEventStatus" command.
* On sender's side callback ZCL device callback @ref ZB_ZCL_REGISTER_DEVICE_CB will be called with one of @ref ZB_ZCL_DRLC_LOAD_CONTROL_EVENT_CB_ID,
* @ref ZB_ZCL_DRLC_CANCEL_LOAD_CONTROL_EVENT_CB_ID, @ref ZB_ZCL_DRLC_CANCEL_ALL_LOAD_CONTROL_EVENTS_CB_ID
* callback ids on reception of @ref ZB_ZCL_DRLC_SRV_CMD_LOAD_CONTROL_EVENT "LoadControlEvent",
* @ref ZB_ZCL_DRLC_SRV_CMD_CANCEL_LOAD_CONTROL_EVENT "CancelLoadControlEvent",
* @ref ZB_ZCL_DRLC_SRV_CMD_CANCEL_ALL_LOAD_CONTROL_EVENTS "CancellAllLoadControlEvents" commands respectively.
* @n On receiver's side callback ZCL device callback @ref ZB_ZCL_REGISTER_DEVICE_CB will be called with
* @ref ZB_ZCL_DRLC_REPORT_EVENT_STATUS_CB_ID callback id.
* @param param - Reference to buffer.
* @param dst_addr - Address of the device to send command to.
* @param dst_addr_mode - Address mode for dst_addr.
* @param dst_ep - Destination endpoint.
* @param src_ep - Current endpoint.
* @param payload - Packet payload (@ref zb_zcl_drlc_report_event_status_payload_t).
* @param cb - Callback which should be called when the ZCL stack receives APS ack.
* @par Usage
* @n Handle @ref ZB_ZCL_DRLC_SRV_CMD_CANCEL_ALL_LOAD_CONTROL_EVENTS "CancellAllLoadControlEvents" command
* @snippet se/in_home_display/se_ihd_zr.c ihd_handle_cancel_all_load_control_events
* @n Example of sending @ref ZB_ZCL_DRLC_CLI_CMD_REPORT_EVENT_STATUS "ReportEventStatus" command
* @snippet se/in_home_display/se_ihd_zr.c ihd_send_report_event_status
*/
void zb_drlc_client_send_report_event_status(zb_uint8_t param,
zb_addr_u *dst_addr, zb_aps_addr_mode_t dst_addr_mode, zb_uint8_t dst_ep,
zb_uint8_t src_ep, zb_zcl_drlc_report_event_status_payload_t *payload, zb_callback_t cb);
/** Function for send @ref ZB_ZCL_DRLC_SEND_CMD_REPORT_EVENT_STATUS_TSN "ReportEventStatus" command.
* On sender's side callback ZCL device callback @ref ZB_ZCL_REGISTER_DEVICE_CB will be called with one of @ref ZB_ZCL_DRLC_LOAD_CONTROL_EVENT_CB_ID,
* @ref ZB_ZCL_DRLC_CANCEL_LOAD_CONTROL_EVENT_CB_ID, @ref ZB_ZCL_DRLC_CANCEL_ALL_LOAD_CONTROL_EVENTS_CB_ID
* callback ids on reception of @ref ZB_ZCL_DRLC_SRV_CMD_LOAD_CONTROL_EVENT "LoadControlEvent",
* @ref ZB_ZCL_DRLC_SRV_CMD_CANCEL_LOAD_CONTROL_EVENT "CancelLoadControlEvent",
* @ref ZB_ZCL_DRLC_SRV_CMD_CANCEL_ALL_LOAD_CONTROL_EVENTS "CancellAllLoadControlEvents" commands respectively.
* @n On receiver's side callback ZCL device callback @ref ZB_ZCL_REGISTER_DEVICE_CB will be called with
* @ref ZB_ZCL_DRLC_REPORT_EVENT_STATUS_CB_ID callback id.
* @param param - Reference to buffer.
* @param dst_addr - Address of the device to send command to.
* @param dst_addr_mode - Address mode for dst_addr.
* @param dst_ep - Destination endpoint.
* @param src_ep - Current endpoint.
* @param payload - Packet payload (@ref zb_zcl_drlc_report_event_status_payload_t).
* @param tsn - transaction sequence number of response
* @param cb - Callback which should be called when the ZCL stack receives APS ack.
* @par Usage
* @n Handle @ref ZB_ZCL_DRLC_SRV_CMD_CANCEL_ALL_LOAD_CONTROL_EVENTS "CancellAllLoadControlEvents" command
* @snippet se/in_home_display/se_ihd_zr.c ihd_handle_cancel_all_load_control_events
* @n Example of sending @ref ZB_ZCL_DRLC_SEND_CMD_REPORT_EVENT_STATUS_TSN "ReportEventStatus" command
* @snippet se/in_home_display/se_ihd_zr.c ihd_send_report_event_status
*/
void zb_drlc_client_send_report_event_status_tsn(zb_uint8_t param,
zb_addr_u *dst_addr, zb_aps_addr_mode_t dst_addr_mode, zb_uint8_t dst_ep,
zb_uint8_t src_ep, zb_zcl_drlc_report_event_status_payload_t *payload, zb_uint8_t tsn, zb_callback_t cb);
/** Function for send @ref ZB_ZCL_DRLC_CLI_CMD_GET_SCHEDULED_EVENTS "GetScheduledEvents" command.
* On receiver's side callback ZCL device callback @ref ZB_ZCL_REGISTER_DEVICE_CB will be called with
* @ref ZB_ZCL_DRLC_GET_SCHEDULED_EVENTS_CB_ID callback id.
* @param param - Reference to buffer.
* @param dst_addr - Address of the device to send command to.
* @param dst_addr_mode - Address mode for dst_addr.
* @param dst_ep - Destination endpoint.
* @param src_ep - Current endpoint.
* @param payload - Packet payload (@ref zb_zcl_drlc_get_scheduled_events_payload_t).
* @param cb - Callback which should be called when the ZCL stack receives APS ack.
* @par Usage
* @n Example of sending @ref ZB_ZCL_DRLC_CLI_CMD_GET_SCHEDULED_EVENTS "GetScheduledEvents"
* @snippet se/in_home_display/se_ihd_zr.c ihd_dev_cmd_get_scheduled_events
*/
void zb_drlc_client_send_get_scheduled_events(zb_uint8_t param,
zb_addr_u *dst_addr, zb_aps_addr_mode_t dst_addr_mode, zb_uint8_t dst_ep,
zb_uint8_t src_ep, zb_zcl_drlc_get_scheduled_events_payload_t *payload, zb_callback_t cb);
/** Macro for call @ref zb_drlc_server_send_load_control_event function
*/
#define ZB_ZCL_DRLC_SEND_CMD_LOAD_CONTROL_EVENT(_param, \
_dst_addr, _dst_addr_mode, _dst_ep, _src_ep, _payload ) \
zb_drlc_server_send_load_control_event(_param, \
_dst_addr, _dst_addr_mode, _dst_ep, _src_ep, _payload, NULL)
/** Macro for call @ref zb_drlc_server_send_cancel_load_control_event function
*/
#define ZB_ZCL_DRLC_SEND_CMD_CANCEL_LCE(_param, \
_dst_addr, _dst_addr_mode, _dst_ep, _src_ep, _payload ) \
zb_drlc_server_send_cancel_load_control_event(_param, \
_dst_addr, _dst_addr_mode, _dst_ep, _src_ep, _payload, NULL)
/** Macro for call @ref zb_drlc_server_send_cancel_all_load_control_events function
*/
#define ZB_ZCL_DRLC_SEND_CMD_CANCEL_ALL_LCE(_param, \
_dst_addr, _dst_addr_mode, _dst_ep, _src_ep, _payload ) \
zb_drlc_server_send_cancel_all_load_control_events(_param, \
_dst_addr, _dst_addr_mode, _dst_ep, _src_ep, _payload, NULL)
/** Macro for call @ref zb_drlc_client_send_get_scheduled_events function
*/
#define ZB_ZCL_DRLC_SEND_CMD_GET_SCHEDULED_EVENTS(_param, \
_dst_addr, _dst_addr_mode, _dst_ep, _src_ep, _payload ) \
zb_drlc_client_send_get_scheduled_events(_param, \
_dst_addr, _dst_addr_mode, _dst_ep, _src_ep, _payload, NULL)
/** Macro for call @ref zb_drlc_client_send_report_event_status function
*/
#define ZB_ZCL_DRLC_SEND_CMD_REPORT_EVENT_STATUS( _param, \
_dst_addr, _dst_addr_mode, _dst_ep, _src_ep, _payload ) \
zb_drlc_client_send_report_event_status(_param, \
_dst_addr, _dst_addr_mode, _dst_ep, _src_ep, _payload, NULL)
/** Macro for call @ref zb_drlc_client_send_report_event_status_tsn function
*/
#define ZB_ZCL_DRLC_SEND_CMD_REPORT_EVENT_STATUS_TSN( _param, \
_dst_addr, _dst_addr_mode, _dst_ep, _src_ep, _payload, _tsn ) \
zb_drlc_client_send_report_event_status_tsn(_param, \
_dst_addr, _dst_addr_mode, _dst_ep, _src_ep, _payload, _tsn, NULL)
/** @} */ /* ZB_ZCL_DRLC_COMMANDS_STRUCTURES_AND_DEFINITIONS */
/** @brief Declare attribute list for DRLC cluster
* @param[in] attr_list - attribute list variable name
* @param[in] utility_enrollment_group - pointer to variable to store @ref ZB_ZCL_ATTR_DRLC_UTILITY_ENROLLMENT_GROUP value
* @param[in] start_randomization_munutes - pointer to variable to store @ref ZB_ZCL_ATTR_DRLC_START_RANDOMIZATION_MINUTES value
* @param[in] duration_randomization_minutes - pointer to variable to store @ref ZB_ZCL_ATTR_DRLC_DURATION_RANDOMIZATION_MINUTES value
* @param[in] device_class - pointer to variable to store @ref ZB_ZCL_ATTR_DRLC_DEVICE_CLASS_VALUE value
*/
#define ZB_ZCL_DECLARE_DRLC_ATTRIB_LIST(attr_list, utility_enrollment_group, \
start_randomization_munutes, duration_randomization_minutes, device_class) \
ZB_ZCL_START_DECLARE_ATTRIB_LIST_CLUSTER_REVISION(attr_list, ZB_ZCL_DRLC) \
ZB_ZCL_SET_ATTR_DESC_M(ZB_ZCL_ATTR_DRLC_UTILITY_ENROLLMENT_GROUP, (utility_enrollment_group), ZB_ZCL_ATTR_TYPE_8BIT, ZB_ZCL_ATTR_ACCESS_READ_WRITE) \
ZB_ZCL_SET_ATTR_DESC_M(ZB_ZCL_ATTR_DRLC_START_RANDOMIZATION_MINUTES, (start_randomization_munutes), ZB_ZCL_ATTR_TYPE_8BIT, ZB_ZCL_ATTR_ACCESS_READ_WRITE) \
ZB_ZCL_SET_ATTR_DESC_M(ZB_ZCL_ATTR_DRLC_DURATION_RANDOMIZATION_MINUTES, (duration_randomization_minutes), ZB_ZCL_ATTR_TYPE_8BIT, ZB_ZCL_ATTR_ACCESS_READ_WRITE) \
ZB_ZCL_SET_ATTR_DESC_M(ZB_ZCL_ATTR_DRLC_DEVICE_CLASS_VALUE, (device_class), ZB_ZCL_ATTR_TYPE_16BIT, ZB_ZCL_ATTR_ACCESS_READ_WRITE) \
ZB_ZCL_FINISH_DECLARE_ATTRIB_LIST
/** Initialize @ref zb_zcl_drlc_client_attrs_s DRLC cluster's attributes */
#define ZB_ZCL_DECLARE_DRLC_ATTR_LIST_INIT \
(zb_zcl_drlc_client_attrs_t) \
{ .utility_enrollment_group = 0, \
.start_randomization_munutes = 0x1e, \
.duration_randomization_minutes = 0, }
/**
* @brief DRLC client cluster attributes
*/
typedef struct zb_zcl_drlc_client_attrs_s
{
/** @copydoc ZB_ZCL_ATTR_DRLC_UTILITY_ENROLLMENT_GROUP
* @see ZB_ZCL_ATTR_DRLC_UTILITY_ENROLLMENT_GROUP
*/
zb_uint8_t utility_enrollment_group;
/** @copydoc ZB_ZCL_ATTR_DRLC_START_RANDOMIZATION_MINUTES
* @see ZB_ZCL_ATTR_DRLC_START_RANDOMIZATION_MINUTES
*/
zb_uint8_t start_randomization_munutes;
/** @copydoc ZB_ZCL_ATTR_DRLC_DURATION_RANDOMIZATION_MINUTES
* @see ZB_ZCL_ATTR_DRLC_DURATION_RANDOMIZATION_MINUTES
*/
zb_uint8_t duration_randomization_minutes;
/** @copydoc ZB_ZCL_ATTR_DRLC_DEVICE_CLASS_VALUE
* @see ZB_ZCL_ATTR_DRLC_DEVICE_CLASS_VALUE
*/
zb_uint16_t device_class_value;
} zb_zcl_drlc_client_attrs_t;
/** @brief Declare attribute list for DRLC cluster
* @param[in] attr_list - attribute list variable name
* @param[in] attrs - variable of @ref zb_zcl_drlc_client_attrs_t type (containing DRLC cluster attributes)
*/
#define ZB_ZCL_DECLARE_DRLC_ATTR_LIST(attr_list, attrs) \
ZB_ZCL_DECLARE_DRLC_ATTRIB_LIST(attr_list, &attrs.utility_enrollment_group, \
&attrs.start_randomization_munutes, &attrs.duration_randomization_minutes, \
&attrs.device_class_value)
/** @} */
/** @endcond */ /* DOXYGEN_ZCL_SECTION */
/** Internal handler for DRLC Cluster commands */
void zb_zcl_drlc_init_server(void);
void zb_zcl_drlc_init_client(void);
#define ZB_ZCL_CLUSTER_ID_DRLC_SERVER_ROLE_INIT zb_zcl_drlc_init_server
#define ZB_ZCL_CLUSTER_ID_DRLC_CLIENT_ROLE_INIT zb_zcl_drlc_init_client
#endif /* ZB_ZCL_DRLC_H_ */