blob: 9a08a833d8ba117c281a6a1ae9c1e2ce8343413c [file] [log] [blame]
'''
{{> header}}
'''
# This file contains generated struct, enum, command definition.
# Users are not expected to import this file, instead, users can use import chip.clusters, which will import all symbols from this file and can get a readable, pretty naming like clusters.OnOff.commands.OnCommand
from dataclasses import dataclass
import typing
from enum import IntEnum
from chip import ChipUtility
from chip.tlv import uint
from .ClusterObjects import ClusterObject, ClusterObjectDescriptor, ClusterObjectFieldDescriptor, ClusterCommand, ClusterAttributeDescriptor
{{#zcl_clusters}}
@dataclass
class {{asUpperCamelCase name}}:
id: typing.ClassVar[int] = {{asHex code 4}}
{{#zcl_enums}}
{{#first}}
class Enums:
{{/first}}
class {{asType label}}(IntEnum):
{{#zcl_enum_items}}
k{{asUpperCamelCase label}} = {{asHex value 2}}
{{/zcl_enum_items}}
{{/zcl_enums}}
{{#zcl_structs}}
{{#first}}
class Structs:
{{/first}}
@dataclass
class {{asUpperCamelCase name}}(ClusterObject):
@ChipUtility.classproperty
def descriptor(cls) -> ClusterObjectDescriptor:
return ClusterObjectDescriptor(
Fields = [
{{#zcl_struct_items}}
ClusterObjectFieldDescriptor(Label="{{ asLowerCamelCase label }}", Tag={{ index }}, Type={{zapTypeToPythonClusterObjectType type ns=(asUpperCamelCase parent.parent.name)}}{{#if isArray}}, IsArray=True{{/if}}),
{{/zcl_struct_items}}
])
{{#zcl_struct_items}}
{{ asLowerCamelCase label }}: {{#if isArray}}typing.List[{{/if}}'{{zapTypeToPythonClusterObjectType type ns=(asUpperCamelCase parent.parent.name)}}'{{#if isArray}}]{{/if}} = None
{{/zcl_struct_items}}
{{#last}}
{{/last}}
{{/zcl_structs}}
{{#zcl_commands}}
{{#first}}
class Commands:
{{/first}}
@dataclass
class {{asUpperCamelCase name}}(ClusterCommand):
cluster_id: typing.ClassVar[int] = {{ asHex parent.code 4 }}
command_id: typing.ClassVar[int] = {{ asHex code 4 }}
{{#if (isServer source)}}
is_client: typing.ClassVar[bool] = False
{{else}}
is_client: typing.ClassVar[bool] = True
{{/if}}
@ChipUtility.classproperty
def descriptor(cls) -> ClusterObjectDescriptor:
return ClusterObjectDescriptor(
Fields = [
{{#zcl_command_arguments}}
ClusterObjectFieldDescriptor(Label="{{ asLowerCamelCase label }}", Tag={{ index }}, Type={{zapTypeToPythonClusterObjectType type ns=(asUpperCamelCase parent.parent.name)}}{{#if isArray}}, IsArray=True{{/if}}),
{{/zcl_command_arguments}}
])
{{#zcl_command_arguments}}
{{ asLowerCamelCase label }}: {{#if isArray}}typing.List[{{/if}}'{{zapTypeToPythonClusterObjectType type ns=(asUpperCamelCase parent.parent.name)}}'{{#if isArray}}]{{/if}} = None
{{/zcl_command_arguments}}
{{/zcl_commands}}
{{#zcl_attributes_server}}
{{#first}}
class Attributes:
{{/first}}
class {{asUpperCamelCase label}}(ClusterAttributeDescriptor):
@ChipUtility.classproperty
def cluster_id(cls) -> int:
return {{ asHex parent.code 4 }}
@ChipUtility.classproperty
def attribute_id(cls) -> int:
return {{ asHex code 4 }}
@ChipUtility.classproperty
def attribute_type(cls) -> ClusterObjectFieldDescriptor:
{{#if entryType}}
return ClusterObjectFieldDescriptor(Type={{zapTypeToPythonClusterObjectType entryType ns=(asUpperCamelCase parent.name)}}, IsArray=True)
{{else}}
return ClusterObjectFieldDescriptor(Type={{zapTypeToPythonClusterObjectType type ns=(asUpperCamelCase parent.name)}})
{{/if}}
{{/zcl_attributes_server}}
{{/zcl_clusters}}