| ''' |
| {{> header}} |
| ''' |
| |
| import ctypes |
| |
| __all__ = ["ChipClusters"] |
| |
| class ChipClusters: |
| SUCCESS_DELEGATE = ctypes.CFUNCTYPE(None) |
| FAILURE_DELEGATE = ctypes.CFUNCTYPE(None, ctypes.c_uint8) |
| |
| {{#chip_client_clusters}} |
| _{{asDelimitedMacro name}}_CLUSTER_INFO = { |
| "clusterName": "{{asUpperCamelCase name}}", |
| "clusterId": {{asHex code 8}}, |
| "commands": { |
| {{#chip_cluster_commands}} |
| {{asHex code 8}}: { |
| "commandId": {{asHex code 8}}, |
| "commandName": "{{asUpperCamelCase name}}", |
| "args": { |
| {{#chip_cluster_command_arguments_with_structs_expanded}} |
| "{{asLowerCamelCase label}}": "{{#if (isCharString type)}}str{{else}}{{asPythonType chipType}}{{/if}}", |
| {{/chip_cluster_command_arguments_with_structs_expanded}} |
| }, |
| }, |
| {{/chip_cluster_commands}} |
| }, |
| "attributes": { |
| {{#chip_server_cluster_attributes}} |
| {{asHex code 8}}: { |
| "attributeName": "{{asUpperCamelCase name}}", |
| "attributeId": {{asHex code 8}}, |
| "type": "{{#if (isCharString type)}}str{{else}}{{asPythonType chipType}}{{/if}}", |
| {{#if isReportableAttribute}} |
| "reportable": True, |
| {{/if}} |
| {{#if isWritableAttribute}} |
| "writable": True, |
| {{/if}} |
| }, |
| {{/chip_server_cluster_attributes}} |
| }, |
| } |
| {{/chip_client_clusters}} |
| |
| _CLUSTER_ID_DICT = { |
| {{#chip_client_clusters}} |
| {{asHex code 8}}: _{{asDelimitedMacro name}}_CLUSTER_INFO, |
| {{/chip_client_clusters}} |
| } |
| |
| _CLUSTER_NAME_DICT = { |
| {{#chip_client_clusters}} |
| "{{asUpperCamelCase name}}": _{{asDelimitedMacro name}}_CLUSTER_INFO, |
| {{/chip_client_clusters}} |
| } |
| |
| def __init__(self, chipstack): |
| self._ChipStack = chipstack |
| |
| def GetClusterInfoById(self, cluster_id: int): |
| data = ChipClusters._CLUSTER_ID_DICT.get(cluster_id, None) |
| if not data: |
| raise UnknownCluster(cluster_id) |
| return data |
| |
| def ListClusterInfo(self): |
| return ChipClusters._CLUSTER_NAME_DICT |
| |
| def ListClusterCommands(self): |
| return { clusterName: { |
| command["commandName"]: command["args"] for command in clusterInfo["commands"].values() |
| } for clusterName, clusterInfo in ChipClusters._CLUSTER_NAME_DICT.items() } |
| |
| def ListClusterAttributes(self): |
| return { clusterName: { |
| attribute["attributeName"]: attribute for attribute in clusterInfo["attributes"].values() |
| } for clusterName, clusterInfo in ChipClusters._CLUSTER_NAME_DICT.items() } |
| |
| # Init native functions |
| |
| def InitLib(self, chipLib): |
| self._chipLib = chipLib |