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 --- .../Components/ZCL/include/zclScenesCluster.h | 487 +++++++++++++++++++++ 1 file changed, 487 insertions(+) create mode 100644 digital/zigbit/bitcloud/stack/Components/ZCL/include/zclScenesCluster.h (limited to 'digital/zigbit/bitcloud/stack/Components/ZCL/include/zclScenesCluster.h') diff --git a/digital/zigbit/bitcloud/stack/Components/ZCL/include/zclScenesCluster.h b/digital/zigbit/bitcloud/stack/Components/ZCL/include/zclScenesCluster.h new file mode 100644 index 00000000..eb8a5ad8 --- /dev/null +++ b/digital/zigbit/bitcloud/stack/Components/ZCL/include/zclScenesCluster.h @@ -0,0 +1,487 @@ +/***************************************************************************//** + \file zclScenesCluster.h + + \brief + The header file describes the ZCL Scenes Cluster and its interface + + The file describes the types and interface of the ZCL Scenes 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: + 12.02.09 D. Kasyanov - Created. +*******************************************************************************/ + +#ifndef _ZCLSCENESCLUSTER_H +#define _ZCLSCENESCLUSTER_H + +/*! +Attributes and commands for determining basic information about a device, +setting user device information such as location, enabling a device and resetting it +to factory defaults. +*/ + +/******************************************************************************* + Includes section +*******************************************************************************/ + +#include +#include + +/******************************************************************************* + Define(s) section +*******************************************************************************/ + +/** + * \brief Scenes Cluster scene name support bit +*/ + +#define SCENE_NAME_SUPPORT_FLAG 0x80 + +/** + * \brief Scenes Cluster server attributes amount +*/ + +#define ZCL_SCENES_CLUSTER_SERVER_ATTRIBUTES_AMOUNT 5 + +/** + * \brief Scenes Cluster client attributes amount. Clinet doesn't have attributes. +*/ + +#define ZCL_SCENES_CLUSTER_CLIENT_ATTRIBTUES_AMOUNT 0 + +/** + * \brief Scenes Cluster commands amount +*/ + +#define ZCL_SCENES_CLUSTER_COMMANDS_AMOUNT 13 + +/** + * \brief Scenes Cluster server's attributes identifiers +*/ + +#define ZCL_SCENES_CLUSTER_SCENE_COUNT_SERVER_ATTRIBUTE_ID CCPU_TO_LE16(0x0000) +#define ZCL_SCENES_CLUSTER_CURRENT_SCENE_SERVER_ATTRIBUTE_ID CCPU_TO_LE16(0x0001) +#define ZCL_SCENES_CLUSTER_CURRENT_GROUP_SERVER_ATTRIBUTE_ID CCPU_TO_LE16(0x0002) +#define ZCL_SCENES_CLUSTER_SCENE_VALID_SERVER_ATTRIBUTE_ID CCPU_TO_LE16(0x0003) +#define ZCL_SCENES_CLUSTER_NAME_SUPPORT_SERVER_ATTRIBUTE_ID CCPU_TO_LE16(0x0004) + +/** + * \brief Scenes Cluster client's command identifiers +*/ + +#define ZCL_SCENES_CLUSTER_ADD_SCENE_COMMAND_ID 0x00 +#define ZCL_SCENES_CLUSTER_VIEW_SCENE_COMMAND_ID 0x01 +#define ZCL_SCENES_CLUSTER_REMOVE_SCENE_COMMAND_ID 0x02 +#define ZCL_SCENES_CLUSTER_REMOVE_ALL_SCENES_COMMAND_ID 0x03 +#define ZCL_SCENES_CLUSTER_STORE_SCENE_COMMAND_ID 0x04 +#define ZCL_SCENES_CLUSTER_RECALL_SCENE_COMMAND_ID 0x05 +#define ZCL_SCENES_CLUSTER_GET_SCENE_MEMBERSHIP_COMMAND_ID 0x06 + +/** + * \brief Scenes Cluster servers's command identifiers +*/ + +#define ZCL_SCENES_CLUSTER_ADD_SCENE_RESPONSE_COMMAND_ID 0x00 +#define ZCL_SCENES_CLUSTER_VIEW_SCENE_RESPONSE_COMMAND_ID 0x01 +#define ZCL_SCENES_CLUSTER_REMOVE_SCENE_RESPONSE_COMMAND_ID 0x02 +#define ZCL_SCENES_CLUSTER_REMOVE_ALL_SCENES_RESPONSE_COMMAND_ID 0x03 +#define ZCL_SCENES_CLUSTER_STORE_SCENE_RESPONSE_COMMAND_ID 0x04 +#define ZCL_SCENES_CLUSTER_GET_SCENE_MEMBERSHIP_RESPONSE_COMMAND_ID 0x06 + + +/** + * \brief Scenes Cluster server define attributes macros +*/ + +#define ZCL_DEFINE_SCENES_CLUSTER_SERVER_ATTRIBUTES() \ + DEFINE_ATTRIBUTE(sceneCount, ZCL_READONLY_ATTRIBUTE, ZCL_SCENES_CLUSTER_SCENE_COUNT_SERVER_ATTRIBUTE_ID, ZCL_U8BIT_DATA_TYPE_ID), \ + DEFINE_ATTRIBUTE(currentScene, ZCL_READONLY_ATTRIBUTE, ZCL_SCENES_CLUSTER_CURRENT_SCENE_SERVER_ATTRIBUTE_ID, ZCL_U8BIT_DATA_TYPE_ID), \ + DEFINE_ATTRIBUTE(currentGroup, ZCL_READONLY_ATTRIBUTE, ZCL_SCENES_CLUSTER_CURRENT_GROUP_SERVER_ATTRIBUTE_ID, ZCL_U16BIT_DATA_TYPE_ID), \ + DEFINE_ATTRIBUTE(sceneValid, ZCL_READONLY_ATTRIBUTE, ZCL_SCENES_CLUSTER_SCENE_VALID_SERVER_ATTRIBUTE_ID, ZCL_BOOLEAN_DATA_TYPE_ID), \ + DEFINE_ATTRIBUTE(nameSupport, ZCL_READONLY_ATTRIBUTE, ZCL_SCENES_CLUSTER_NAME_SUPPORT_SERVER_ATTRIBUTE_ID, ZCL_8BIT_BITMAP_DATA_TYPE_ID) + + +/** + * \brief On/Off Cluster define commands macros +*/ + +#define ZCL_DEFINE_SCENES_CLUSTER_COMMANDS(addSceneCommandInd, viewSceneCommandInd, removeSceneCommandInd, \ + removeAllScenesCommandInd, storeSceneCommandInd, recallSceneCommandInd, \ + getSceneMembershipCommandInd, addSceneResponseCommandInd, viewSceneResponseCommandInd, \ + removeSceneResponseCommandInd, removeAllScenesResponseCommandInd, storeSceneResponseCommandInd, \ + getSceneMembershipResponseInd) \ + DEFINE_COMMAND(addSceneCommand, ZCL_SCENES_CLUSTER_ADD_SCENE_COMMAND_ID, \ + COMMAND_OPTIONS(CLIENT_TO_SERVER, ZCL_THERE_IS_RELEVANT_RESPONSE, ZCL_COMMAND_ACK), \ + addSceneCommandInd), \ + DEFINE_COMMAND(viewSceneCommand, ZCL_SCENES_CLUSTER_VIEW_SCENE_COMMAND_ID, \ + COMMAND_OPTIONS(CLIENT_TO_SERVER, ZCL_THERE_IS_RELEVANT_RESPONSE, ZCL_COMMAND_ACK), \ + viewSceneCommandInd), \ + DEFINE_COMMAND(removeSceneCommand, ZCL_SCENES_CLUSTER_REMOVE_SCENE_COMMAND_ID, \ + COMMAND_OPTIONS(CLIENT_TO_SERVER, ZCL_THERE_IS_RELEVANT_RESPONSE, ZCL_COMMAND_ACK), \ + removeSceneCommandInd), \ + DEFINE_COMMAND(removeAllScenesCommand, ZCL_SCENES_CLUSTER_REMOVE_ALL_SCENES_COMMAND_ID, \ + COMMAND_OPTIONS(CLIENT_TO_SERVER, ZCL_THERE_IS_RELEVANT_RESPONSE, ZCL_COMMAND_ACK), \ + removeAllScenesCommandInd), \ + DEFINE_COMMAND(storeSceneCommand, ZCL_SCENES_CLUSTER_STORE_SCENE_COMMAND_ID, \ + COMMAND_OPTIONS(CLIENT_TO_SERVER, ZCL_THERE_IS_RELEVANT_RESPONSE, ZCL_COMMAND_ACK), \ + storeSceneCommandInd), \ + DEFINE_COMMAND(recallSceneCommand, ZCL_SCENES_CLUSTER_RECALL_SCENE_COMMAND_ID, \ + COMMAND_OPTIONS(CLIENT_TO_SERVER, ZCL_THERE_IS_NO_RELEVANT_RESPONSE, ZCL_COMMAND_ACK), \ + recallSceneCommandInd), \ + DEFINE_COMMAND(getSceneMembershipCommand, ZCL_SCENES_CLUSTER_GET_SCENE_MEMBERSHIP_COMMAND_ID, \ + COMMAND_OPTIONS(CLIENT_TO_SERVER, ZCL_THERE_IS_RELEVANT_RESPONSE, ZCL_COMMAND_ACK), \ + getSceneMembershipCommandInd), \ + DEFINE_COMMAND(addSceneResponseCommand, ZCL_SCENES_CLUSTER_ADD_SCENE_RESPONSE_COMMAND_ID, \ + COMMAND_OPTIONS(SERVER_TO_CLIENT, ZCL_THERE_IS_NO_RELEVANT_RESPONSE, ZCL_COMMAND_ACK), \ + addSceneResponseCommandInd), \ + DEFINE_COMMAND(viewSceneResponseCommand, ZCL_SCENES_CLUSTER_VIEW_SCENE_RESPONSE_COMMAND_ID, \ + COMMAND_OPTIONS(SERVER_TO_CLIENT, ZCL_THERE_IS_NO_RELEVANT_RESPONSE, ZCL_COMMAND_ACK), \ + viewSceneResponseCommandInd), \ + DEFINE_COMMAND(removeSceneResponseCommand, ZCL_SCENES_CLUSTER_REMOVE_SCENE_RESPONSE_COMMAND_ID, \ + COMMAND_OPTIONS(SERVER_TO_CLIENT, ZCL_THERE_IS_NO_RELEVANT_RESPONSE, ZCL_COMMAND_ACK), \ + removeSceneResponseCommandInd), \ + DEFINE_COMMAND(removeAllScenesResponseCommand, ZCL_SCENES_CLUSTER_REMOVE_ALL_SCENES_RESPONSE_COMMAND_ID, \ + COMMAND_OPTIONS(SERVER_TO_CLIENT, ZCL_THERE_IS_NO_RELEVANT_RESPONSE, ZCL_COMMAND_ACK), \ + removeAllScenesResponseCommandInd), \ + DEFINE_COMMAND(storeSceneResponseCommand, ZCL_SCENES_CLUSTER_STORE_SCENE_RESPONSE_COMMAND_ID, \ + COMMAND_OPTIONS(SERVER_TO_CLIENT, ZCL_THERE_IS_NO_RELEVANT_RESPONSE, ZCL_COMMAND_ACK), \ + storeSceneResponseCommandInd), \ + DEFINE_COMMAND(getSceneMembershipResponse, ZCL_SCENES_CLUSTER_GET_SCENE_MEMBERSHIP_RESPONSE_COMMAND_ID, \ + COMMAND_OPTIONS(SERVER_TO_CLIENT, ZCL_THERE_IS_NO_RELEVANT_RESPONSE, ZCL_COMMAND_ACK), \ + getSceneMembershipResponseInd) + + +/** + * \brief Scene Cluster definition macros +*/ + +#define SCENES_CLUSTER_ZCL_CLIENT_CLUSTER_TYPE(clattributes, clcommands) \ +{ \ + .id = SCENES_CLUSTER_ID, \ + .options = { \ + .type = ZCL_CLIENT_CLUSTER_TYPE, \ + .security = ZCL_APPLICATION_LINK_KEY_CLUSTER_SECURITY, \ + }, \ + .attributesAmount = ZCL_SCENES_CLUSTER_CLIENT_ATTRIBTUES_AMOUNT, \ + .attributes = (uint8_t *)clattributes, \ + .commandsAmount = ZCL_SCENES_CLUSTER_COMMANDS_AMOUNT, \ + .commands = (uint8_t *)clcommands \ +} + +#define SCENES_CLUSTER_ZCL_SERVER_CLUSTER_TYPE(clattributes, clcommands) \ +{ \ + .id = SCENES_CLUSTER_ID, \ + .options = { \ + .type = ZCL_SERVER_CLUSTER_TYPE, \ + .security = ZCL_APPLICATION_LINK_KEY_CLUSTER_SECURITY, \ + }, \ + .attributesAmount = ZCL_SCENES_CLUSTER_SERVER_ATTRIBUTES_AMOUNT, \ + .attributes = (uint8_t *)clattributes, \ + .commandsAmount = ZCL_SCENES_CLUSTER_COMMANDS_AMOUNT, \ + .commands = (uint8_t *)clcommands \ +} + +#define DEFINE_SCENES_CLUSTER(cltype, clattributes, clcommands) \ + SCENES_CLUSTER_##cltype(clattributes, clcommands) + +/****************************************************************************** + Types section +******************************************************************************/ +BEGIN_PACK + +/** + * \brief Add Scene Command Payload format. + */ + +typedef struct PACK +{ + uint16_t groupId; + uint8_t sceneId; + uint16_t transitionTime; + uint8_t sceneNameAndExtField[1]; +} ZCL_AddScene_t; + +/** + * \brief View Scene Command Payload format. + */ + +typedef struct PACK +{ + uint16_t groupId; + uint8_t sceneId; +} ZCL_ViewScene_t; + +/** + * \brief Remove Scene Command Payload format. + */ + +typedef struct PACK +{ + uint16_t groupId; + uint8_t sceneId; +} ZCL_RemoveScene_t; + +/** + * \brief Remove All Scenes Command Payload format. + */ + +typedef struct PACK +{ + uint16_t groupId; +} ZCL_RemoveAllScenes_t; + +/** + * \brief Store Scene Command Payload format. + */ + +typedef struct PACK +{ + uint16_t groupId; + uint8_t sceneId; +} ZCL_StoreScene_t; + +/** + * \brief Recall Scene Command Payload format. + */ + +typedef struct PACK +{ + uint16_t groupId; + uint8_t sceneId; +} ZCL_RecallScene_t; + +/** + * \brief Get Scene Membership Command Payload format. + */ + +typedef struct PACK +{ + uint16_t groupId; +} ZCL_GetSceneMembership_t; + +/** + * \brief Add Scene Response Command Payload format. + */ + +typedef struct PACK +{ + uint8_t status; + uint16_t groupId; + uint8_t sceneId; +} ZCL_AddSceneResponse_t; + +/** + * \brief View Scene Response Command Payload format. + */ + +typedef struct PACK +{ + uint8_t status; + uint16_t groupId; + uint8_t sceneId; + uint16_t transitionTime; + uint8_t nameAndExtField[1]; // string sceneName, extension field. +} ZCL_ViewSceneResponse_t; + +/** + * \brief Remove Scene Command Payload format. + */ + +typedef struct PACK +{ + uint8_t status; + uint16_t groupId; + uint8_t sceneId; +} ZCL_RemoveSceneResponse_t; + +/** + * \brief Remove All Scenes Response Command Payload format. + */ + +typedef struct PACK +{ + uint8_t status; + uint16_t groupId; +} ZCL_RemoveAllScenesResponse_t; + +/** + * \brief Store Scene Response Command Payload format. + */ + +typedef struct PACK +{ + uint8_t status; + uint16_t groupId; + uint8_t sceneId; +} ZCL_StoreSceneResponse_t; + +/** + * \brief Get Scene Membership Response Command Payload format. + */ + +typedef struct PACK +{ + uint8_t status; + uint8_t capacity; + uint16_t groupId; + uint8_t sceneCount; + uint8_t sceneList[1]; +} ZCL_GetSceneMembershipResponse_t; + +/** + * \brief Scene Cluster server's attributes + */ + +typedef struct PACK +{ + struct PACK + { + ZCL_AttributeId_t id; + uint8_t type; + uint8_t properties; + uint8_t value; + } sceneCount; + + struct PACK + { + ZCL_AttributeId_t id; + uint8_t type; + uint8_t properties; + uint8_t value; + } currentScene; + + struct PACK + { + ZCL_AttributeId_t id; + uint8_t type; + uint8_t properties; + uint16_t value; + } currentGroup; + + struct PACK + { + ZCL_AttributeId_t id; + uint8_t type; + uint8_t properties; + bool value; + } sceneValid; + + struct PACK + { + ZCL_AttributeId_t id; + uint8_t type; + uint8_t properties; + uint8_t value; + } nameSupport; +} ZCL_SceneClusterServerAttributes_t; + +END_PACK + +/** + * \brief Scene Cluster commands. + */ + +typedef struct +{ + struct + { + ZCL_CommandId_t id; + ZclCommandOptions_t options; + ZCL_Status_t(*addSceneCommand)(ZCL_Addressing_t *addressing, uint8_t payloadLength, ZCL_AddScene_t * payload); + } addSceneCommand; + + struct + { + ZCL_CommandId_t id; + ZclCommandOptions_t options; + ZCL_Status_t(*viewSceneCommand)(ZCL_Addressing_t *addressing, uint8_t payloadLength, ZCL_ViewScene_t * payload); + } viewSceneCommand; + + struct + { + ZCL_CommandId_t id; + ZclCommandOptions_t options; + ZCL_Status_t(*removeSceneCommand)(ZCL_Addressing_t *addressing, uint8_t payloadLength, ZCL_RemoveScene_t * payload); + } removeSceneCommand; + + struct + { + ZCL_CommandId_t id; + ZclCommandOptions_t options; + ZCL_Status_t(*removeAllScenesCommand)(ZCL_Addressing_t *addressing, uint8_t payloadLength, ZCL_RemoveAllScenes_t * payload); + } removeAllScenesCommand; + + struct + { + ZCL_CommandId_t id; + ZclCommandOptions_t options; + ZCL_Status_t(*storeSceneCommand)(ZCL_Addressing_t *addressing, uint8_t payloadLength, ZCL_StoreScene_t * payload); + } storeSceneCommand; + + struct + { + ZCL_CommandId_t id; + ZclCommandOptions_t options; + ZCL_Status_t(*recallSceneCommand)(ZCL_Addressing_t *addressing, uint8_t payloadLength, ZCL_RecallScene_t * payload); + } recallSceneCommand; + + struct + { + ZCL_CommandId_t id; + ZclCommandOptions_t options; + ZCL_Status_t(*getSceneMembershipCommand)(ZCL_Addressing_t *addressing, uint8_t payloadLength, ZCL_GetSceneMembership_t * payload); + } getSceneMembershipCommand; + + struct + { + ZCL_CommandId_t id; + ZclCommandOptions_t options; + ZCL_Status_t(*addSceneResponseCommand)(ZCL_Addressing_t *addressing, uint8_t payloadLength, ZCL_AddSceneResponse_t * payload); + } addSceneResponseCommand; + + struct + { + ZCL_CommandId_t id; + ZclCommandOptions_t options; + ZCL_Status_t(*viewSceneResponseCommand)(ZCL_Addressing_t *addressing, uint8_t payloadLength, ZCL_ViewSceneResponse_t * payload); + } viewSceneResponseCommand; + + struct + { + ZCL_CommandId_t id; + ZclCommandOptions_t options; + ZCL_Status_t(*removeSceneResponseCommand)(ZCL_Addressing_t *addressing, uint8_t payloadLength, ZCL_RemoveSceneResponse_t * payload); + } removeSceneResponseCommand; + + struct + { + ZCL_CommandId_t id; + ZclCommandOptions_t options; + ZCL_Status_t(*removeAllScenesResponseCommand)(ZCL_Addressing_t *addressing, uint8_t payloadLength, ZCL_RemoveAllScenesResponse_t * payload); + } removeAllScenesResponseCommand; + + struct + { + ZCL_CommandId_t id; + ZclCommandOptions_t options; + ZCL_Status_t(*storeSceneResponseCommand)(ZCL_Addressing_t *addressing, uint8_t payloadLength, ZCL_StoreSceneResponse_t * payload); + } storeSceneResponseCommand; + + struct + { + ZCL_CommandId_t id; + ZclCommandOptions_t options; + ZCL_Status_t(*getSceneMembershipResponse)(ZCL_Addressing_t *addressing, uint8_t payloadLength, ZCL_GetSceneMembershipResponse_t * payload); + } getSceneMembershipResponse; +} ZCL_ScenesClusterCommands_t; + + +#endif /* _ZCLSCENESCLUSTER_H */ + -- cgit v1.2.3