From b24866225a6301d3a663f874725e83c012dc25d3 Mon Sep 17 00:00:00 2001 From: Florent Duchon Date: Wed, 26 Dec 2012 17:36:00 +0100 Subject: digital/beacon: add bitcloud stack into common directory digital/zigbit --- .../ZCL/include/zclDemandResponseCluster.h | 351 +++++++++++++++++++++ 1 file changed, 351 insertions(+) create mode 100644 digital/zigbit/bitcloud/stack/Components/ZCL/include/zclDemandResponseCluster.h (limited to 'digital/zigbit/bitcloud/stack/Components/ZCL/include/zclDemandResponseCluster.h') diff --git a/digital/zigbit/bitcloud/stack/Components/ZCL/include/zclDemandResponseCluster.h b/digital/zigbit/bitcloud/stack/Components/ZCL/include/zclDemandResponseCluster.h new file mode 100644 index 00000000..a3b9e23c --- /dev/null +++ b/digital/zigbit/bitcloud/stack/Components/ZCL/include/zclDemandResponseCluster.h @@ -0,0 +1,351 @@ +/************************************************************************//** + \file zclDemandResponseCluster.h + + \brief + The header file describes the Demand Response Cluster. + + \author + Atmel Corporation: http://www.atmel.com \n + Support email: avr@atmel.com + + Copyright (c) 2008-2011, Atmel Corporation. All rights reserved. + Licensed under Atmel's Limited License Agreement (BitCloudTM). + + \internal + History: + 03.02.09 A. Mandychev - Created. +******************************************************************************/ + +#ifndef _ZCLDEMANDRESPONSECLUSTER_H +#define _ZCLDEMANDRESPONSECLUSTER_H + +/****************************************************************************** + Includes section +******************************************************************************/ +#include +#include + +/****************************************************************************** + Defines section +******************************************************************************/ +/** + * \brief Demand Response Server Cluster attributes amount. +*/ +#define DRLC_CLUSTER_SERVER_ATTRIBUTES_AMOUNT 0 + +/** + * \brief Demand Response Client Cluster attributes amount. +*/ +#define DRLC_CLUSTER_CLIENT_ATTRIBUTES_AMOUNT 4 + +/** + * \brief Demand Response Cluster commands amount. +*/ +#define DRLC_CLUSTER_COMMANDS_AMOUNT 5 + +/** + * \brief Demand Response Server Cluster commands identifiers. +*/ +#define LOAD_CONTROL_EVENT_COMMAND_ID 0x00 +#define CANCEL_LOAD_CONTROL_EVENT_COMMAND_ID 0x01 +#define CANCEL_ALL_LOAD_CONTROL_EVENTS_COMMAND_ID 0x02 + +/** + * \brief Demand Response Client Cluster commands identifiers. +*/ +#define REPORT_EVENT_STATUS_COMMAND_ID 0x00 +#define GET_SCHEDULED_EVENTS_COMMAND_ID 0x01 + +/** + * \brief Report event status identifiers + */ +#define REPORT_EVENT_STATUS_COMMAND_RECEIVED 0x01 +#define REPORT_EVENT_STATUS_EVENT_STARTED 0x02 +#define REPORT_EVENT_STATUS_EVENT_COMPLETED 0x03 +#define REPORT_EVENT_STATUS_EVENT_CANCELED 0x06 +#define REPORT_EVENT_STATUS_INVALID_CANCEL_COMMAND_DEFAULT 0xF8 + +#define DEFINE_DRLC_CLUSTER_COMMANDS(clLoadControlEventInd, \ + clCancelLoadControlEventInd, \ + clCancelAllLoadControlEventsInd, \ + clReportEventStatusInd, \ + clGetScheduledEventsInd) \ + DEFINE_COMMAND(loadControlEventCommand, 0x00, COMMAND_OPTIONS(SERVER_TO_CLIENT, ZCL_THERE_IS_RELEVANT_RESPONSE, ZCL_COMMAND_ACK), clLoadControlEventInd), \ + DEFINE_COMMAND(cancelLoadControlEventCommand, 0x01, COMMAND_OPTIONS(SERVER_TO_CLIENT, ZCL_THERE_IS_NO_RELEVANT_RESPONSE, ZCL_COMMAND_ACK), clCancelLoadControlEventInd), \ + DEFINE_COMMAND(cancelAllLoadControlEventsCommand, 0x02, COMMAND_OPTIONS(SERVER_TO_CLIENT, ZCL_THERE_IS_NO_RELEVANT_RESPONSE, ZCL_COMMAND_ACK), clCancelAllLoadControlEventsInd), \ + DEFINE_COMMAND(reportEventStatusCommand, 0x00, COMMAND_OPTIONS(CLIENT_TO_SERVER, ZCL_THERE_IS_NO_RELEVANT_RESPONSE, ZCL_COMMAND_ACK), clReportEventStatusInd), \ + DEFINE_COMMAND(getScheduledEventsCommand, 0x01, COMMAND_OPTIONS(CLIENT_TO_SERVER, ZCL_THERE_IS_NO_RELEVANT_RESPONSE, ZCL_COMMAND_ACK), clGetScheduledEventsInd) + + + + +#define DEFINE_DRLC_CLUSTER_CLIENT_ATTRIBUTES() \ + DEFINE_ATTRIBUTE(utilityEnrolmentGroupAttr, ZCL_READWRITE_ATTRIBUTE, CCPU_TO_LE16(0x0000), ZCL_U8BIT_DATA_TYPE_ID), \ + DEFINE_ATTRIBUTE(startRandomizeMinutesAttr, ZCL_READWRITE_ATTRIBUTE, CCPU_TO_LE16(0x0001), ZCL_U8BIT_DATA_TYPE_ID), \ + DEFINE_ATTRIBUTE(endRandomizeMinutesAttr, ZCL_READWRITE_ATTRIBUTE, CCPU_TO_LE16(0x0002), ZCL_U8BIT_DATA_TYPE_ID), \ + DEFINE_ATTRIBUTE(deviceClassValueAttr, ZCL_READONLY_ATTRIBUTE, CCPU_TO_LE16(0x0003), ZCL_16BIT_BITMAP_DATA_TYPE_ID) + +#define DRLC_CLUSTER_ZCL_SERVER_CLUSTER_TYPE(clattributes, clcommands) \ + { \ + .id = DEMAND_RESPONSE_AND_LOAD_CONTROL_CLUSTER_ID, \ + .options = {.type = ZCL_SERVER_CLUSTER_TYPE, .security = ZCL_APPLICATION_LINK_KEY_CLUSTER_SECURITY}, \ + .attributesAmount = DRLC_CLUSTER_SERVER_ATTRIBUTES_AMOUNT, \ + .attributes = NULL, \ + .commandsAmount = DRLC_CLUSTER_COMMANDS_AMOUNT, \ + .commands = (uint8_t *) clcommands \ + } + +#define DRLC_CLUSTER_ZCL_CLIENT_CLUSTER_TYPE(clattributes, clcommands) \ + { \ + .id = DEMAND_RESPONSE_AND_LOAD_CONTROL_CLUSTER_ID, \ + .options = {.type = ZCL_CLIENT_CLUSTER_TYPE, .security = ZCL_APPLICATION_LINK_KEY_CLUSTER_SECURITY}, \ + .attributesAmount = DRLC_CLUSTER_CLIENT_ATTRIBUTES_AMOUNT, \ + .attributes = (uint8_t *) clattributes, \ + .commandsAmount = DRLC_CLUSTER_COMMANDS_AMOUNT, \ + .commands = (uint8_t *) clcommands \ + } + +#define DEFINE_DRLC_CLUSTER(cltype, clattributes, clcommands) \ + DRLC_CLUSTER_##cltype(clattributes, clcommands) + +//! Signature type. AMI r15 profile spec., D.2.3.3.1.1. +#define ZCL_ECDSA_SIGNATURE_TYPE 0x01 +//! Signature length. AMI r15 profile spec., D.2.3.3.1.1. +#define REPORT_EVENT_STATUS_SIGNATURE_LENGTH 42 + +/****************************************************************************** + Types section +******************************************************************************/ + +BEGIN_PACK + +/** + * \brief Device Class type. +*/ +typedef struct PACK +{ + LITTLE_ENDIAN_OCTET(8,( + uint16_t hvacCompressor : 1, + uint16_t stripHeaters : 1, + uint16_t waterHeater : 1, + uint16_t poolPump : 1, + uint16_t smartAppliances : 1, + uint16_t irrigationPump : 1, + uint16_t managedCommercAndIndustrLoads : 1, + uint16_t simpleMiscLoads : 1 + )) + LITTLE_ENDIAN_OCTET(5,( + uint16_t exteriorLighting : 1, + uint16_t interiorLighting : 1, + uint16_t electricalVehicle : 1, + uint16_t generationSystem : 1, + uint16_t reserved : 4 + )) +} ZCL_DeviceClass_t; + +/** + * \brief Device Class type. +*/ +typedef struct PACK +{ + LITTLE_ENDIAN_OCTET(3,( + uint8_t randStartTime : 1, + uint8_t randEndTime : 1, + uint8_t reserved : 6 + )) +} ZCL_EventControl_t; + +/** + * \brief The Load Control Event Command Payload. +*/ +typedef struct PACK +{ + uint32_t issuerEventId; + ZCL_DeviceClass_t deviceClass; + uint8_t utilityEnrolmentGroup; + uint32_t startTime; + uint16_t durationInMinutes; + uint8_t criticalityLevel; + uint8_t coolingTemperatureOffset; + uint8_t heatingTemperatureOffset; + uint16_t coolingTemperatureSetPoint; + uint16_t heatingTemperatureSetPoint; + int8_t avrgLoadAdjstPercentage; + uint8_t dutyCycle; + ZCL_EventControl_t eventControl; +} ZCL_LoadControlEvent_t; + +/** + * \brief The Cancel Control type. +*/ +typedef struct PACK +{ + LITTLE_ENDIAN_OCTET(2,( + uint8_t randomizeEnd : 1, + uint8_t reserved : 7 + )) +} ZCL_CancelControl_t; + +/** + * \brief The Cancel Load Control Event Command Payload. +*/ +typedef struct PACK +{ + uint32_t issuerEventId; + ZCL_DeviceClass_t deviceClass; + uint8_t utilityEnrolmentGroup; + ZCL_CancelControl_t cancelControl; + ZCL_UTCTime_t effectiveTime; +} ZCL_CancelLoadControlEvent_t; + +typedef struct PACK +{ + ZCL_CancelControl_t cancelControl; // ZCL_U8BIT_BITMAP_TYPE_ID +} ZCL_CancelAllLoadControlEvents_t; + +typedef struct PACK +{ + //! Utility Enrolment Group Attribute descriptor + struct PACK + { + ZCL_AttributeId_t id; //!