-
Notifications
You must be signed in to change notification settings - Fork 2.1k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add ZAP templates to src/app (#3638)
* Moved templates out of PR #3464 * fix PR comments * Moved template to src/app * Fix PR comments * Renamed src/app/zap to src/app/zap-templates * removed CLI define * Switch to pragma once * Restyled by whitespace * Restyled by clang-format * Restyled by prettier-json * Restyled by prettier-markdown Co-authored-by: Restyled.io <[email protected]>
- Loading branch information
1 parent
d652be4
commit c2e5453
Showing
19 changed files
with
663 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
# ZAP generation templates | ||
|
||
## What is this repo? | ||
|
||
This directory contains generation templates for ZAP, ZCL Advanced Platform. | ||
|
||
**IMPORTANT**: Changes to templates will affect all examples. | ||
|
||
# Useful command for CHIP | ||
|
||
Run ZAP with UI to configure endpoints and clusters | ||
|
||
``` | ||
cd ./third_party/zap/repo/ | ||
node src-script/zap-start.js --logToStdout --gen ../../../src/app/zap-templates/chip-templates.json | ||
``` | ||
|
||
Generate files in headless mode | ||
|
||
``` | ||
cd ./third_party/zap/repo/ | ||
node src-script/zap-generate.js -z ./zcl-builtin/silabs/zcl.json -g ../../../src/app/zap-templates/chip-templates.json -i <path to *.zap file> -o <Path to /gen/ folder> | ||
``` | ||
|
||
For more information please see the documentation under `docs/` in | ||
[ZAP](https://github.com/project-chip/zap) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
{{chip_header}} | ||
|
||
// Prevent multiple inclusion | ||
#pragma once | ||
|
||
#include <stdint.h> | ||
#include "enums.h" | ||
|
||
{{#zcl_structs}} | ||
|
||
// Struct for {{label}} | ||
typedef struct _{{asType label}} { | ||
{{#zcl_struct_items}} | ||
{{ident}}{{asUnderlyingType type}} {{asSymbol label}}; | ||
{{/zcl_struct_items}} | ||
} {{asUnderlyingType label}}; | ||
{{/zcl_structs}} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,53 @@ | ||
{{chip_header}} | ||
|
||
// Prevent multiple inclusion | ||
#pragma once | ||
|
||
// Attribute masks modify how attributes are used by the framework | ||
// | ||
// Attribute that has this mask is NOT read-only | ||
#define ATTRIBUTE_MASK_WRITABLE (0x01) | ||
// Attribute that has this mask is saved to a token | ||
#define ATTRIBUTE_MASK_TOKENIZE (0x02) | ||
// Attribute that has this mask has a min/max values | ||
#define ATTRIBUTE_MASK_MIN_MAX (0x04) | ||
// Manufacturer specific attribute | ||
#define ATTRIBUTE_MASK_MANUFACTURER_SPECIFIC (0x08) | ||
// Attribute deferred to external storage | ||
#define ATTRIBUTE_MASK_EXTERNAL_STORAGE (0x10) | ||
// Attribute is singleton | ||
#define ATTRIBUTE_MASK_SINGLETON (0x20) | ||
// Attribute is a client attribute | ||
#define ATTRIBUTE_MASK_CLIENT (0x40) | ||
|
||
// Cluster masks modify how clusters are used by the framework | ||
// | ||
// Does this cluster have init function? | ||
#define CLUSTER_MASK_INIT_FUNCTION (0x01) | ||
// Does this cluster have attribute changed function? | ||
#define CLUSTER_MASK_ATTRIBUTE_CHANGED_FUNCTION (0x02) | ||
// Does this cluster have default response function? | ||
#define CLUSTER_MASK_DEFAULT_RESPONSE_FUNCTION (0x04) | ||
// Does this cluster have message sent function? | ||
#define CLUSTER_MASK_MESSAGE_SENT_FUNCTION (0x08) | ||
// Does this cluster have manufacturer specific attribute changed function? | ||
#define CLUSTER_MASK_MANUFACTURER_SPECIFIC_ATTRIBUTE_CHANGED_FUNCTION (0x10) | ||
// Does this cluster have pre-attribute changed function? | ||
#define CLUSTER_MASK_PRE_ATTRIBUTE_CHANGED_FUNCTION (0x20) | ||
// Cluster is a server | ||
#define CLUSTER_MASK_SERVER (0x40) | ||
// Cluster is a client | ||
#define CLUSTER_MASK_CLIENT (0x80) | ||
|
||
// Command masks modify meanings of commands | ||
// | ||
// Is sending of this client command supported | ||
#define COMMAND_MASK_OUTGOING_CLIENT (0x01) | ||
// Is sending of this server command supported | ||
#define COMMAND_MASK_OUTGOING_SERVER (0x02) | ||
// Is receiving of this client command supported | ||
#define COMMAND_MASK_INCOMING_CLIENT (0x04) | ||
// Is receiving of this server command supported | ||
#define COMMAND_MASK_INCOMING_SERVER (0x08) | ||
// Is this command manufacturer specific? | ||
#define COMMAND_MASK_MANUFACTURER_SPECIFIC (0x10) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
{{chip_header}} | ||
|
||
// Prevent multiple inclusion | ||
#pragma once | ||
|
||
{{#zcl_clusters}} | ||
// Attribute ids for cluster: {{label}} | ||
|
||
{{#zcl_attributes_client}} | ||
{{#first}} | ||
// Client attributes | ||
{{/first}} | ||
#define ZCL_{{asDelimitedMacro define}}_ATTRIBUTE_ID ({{asHex code 4}}) | ||
{{#last}} | ||
|
||
{{/last}} | ||
{{/zcl_attributes_client}} | ||
{{#zcl_attributes_server}} | ||
{{#first}} | ||
// Server attributes | ||
{{/first}} | ||
#define ZCL_{{asDelimitedMacro define}}_ATTRIBUTE_ID ({{asHex code 4}}) | ||
{{#last}} | ||
|
||
{{/last}} | ||
{{/zcl_attributes_server}} | ||
{{/zcl_clusters}} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,20 @@ | ||
{{chip_header}} | ||
|
||
// Prevent multiple inclusion | ||
#pragma once | ||
|
||
// ZCL attribute types | ||
enum { | ||
{{#zcl_atomics}} | ||
{{ident}}ZCL_{{asDelimitedMacro name}}_ATTRIBUTE_TYPE = {{asHex atomicId 2}}, // {{description}} | ||
{{/zcl_atomics}} | ||
}; | ||
|
||
// ZCL attribute sizes | ||
#define ZAP_GENERATED_ATTRIBUTE_SIZES { \ | ||
{{#zcl_atomics}} | ||
{{#if size}} | ||
{{ident}}ZCL_{{asDelimitedMacro name}}_ATTRIBUTE_TYPE, {{size}}, \ | ||
{{/if}} | ||
{{/zcl_atomics}} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,127 @@ | ||
{{chip_header}} | ||
|
||
#include <stdint.h> | ||
|
||
#include "af-structs.h" | ||
#include "call-command-handler.h" | ||
#include "callback.h" | ||
#include "command-id.h" | ||
#include "util.h" | ||
|
||
{{#all_user_clusters}} | ||
{{#if (isEnabled enabled)}} | ||
EmberAfStatus emberAf{{asCamelCased name false}}Cluster{{asCamelCased side false}}CommandParse(EmberAfClusterCommand * cmd); | ||
{{/if}} | ||
{{/all_user_clusters}} | ||
|
||
|
||
static EmberAfStatus status(bool wasHandled, bool clusterExists, bool mfgSpecific) | ||
{ | ||
if (wasHandled) | ||
{ | ||
return EMBER_ZCL_STATUS_SUCCESS; | ||
} | ||
else if (mfgSpecific) | ||
{ | ||
return EMBER_ZCL_STATUS_UNSUP_MANUF_CLUSTER_COMMAND; | ||
} | ||
else if (clusterExists) | ||
{ | ||
return EMBER_ZCL_STATUS_UNSUP_COMMAND; | ||
} | ||
else | ||
{ | ||
return EMBER_ZCL_STATUS_UNSUPPORTED_CLUSTER; | ||
} | ||
} | ||
|
||
|
||
// Main command parsing controller. | ||
EmberAfStatus emberAfClusterSpecificCommandParse(EmberAfClusterCommand * cmd) | ||
{ | ||
EmberAfStatus result = status(false, false, cmd->mfgSpecific); | ||
if (cmd->direction == (uint8_t) ZCL_DIRECTION_SERVER_TO_CLIENT && | ||
emberAfContainsClientWithMfgCode(cmd->apsFrame->destinationEndpoint, cmd->apsFrame->clusterId, cmd->mfgCode)) | ||
{ | ||
switch (cmd->apsFrame->clusterId) | ||
{ | ||
{{#all_user_clusters}} | ||
{{#if (isEnabled enabled)}} | ||
{{#if (isClient side) }} | ||
case ZCL_{{asDelimitedMacro define}}_ID : | ||
result = emberAf{{asCamelCased name false}}Cluster{{asCamelCased side false}}CommandParse(cmd); | ||
break; | ||
{{/if}} | ||
{{/if}} | ||
{{/all_user_clusters}} | ||
default: | ||
// Unrecognized cluster ID, error status will apply. | ||
break; | ||
} | ||
} | ||
else if (cmd->direction == (uint8_t) ZCL_DIRECTION_CLIENT_TO_SERVER && | ||
emberAfContainsServerWithMfgCode(cmd->apsFrame->destinationEndpoint, cmd->apsFrame->clusterId, cmd->mfgCode)) | ||
{ | ||
switch (cmd->apsFrame->clusterId) | ||
{ | ||
{{#all_user_clusters}} | ||
{{#if (isEnabled enabled)}} | ||
{{#unless (isClient side) }} | ||
case ZCL_{{asDelimitedMacro define}}_ID : | ||
result = emberAf{{asCamelCased name false}}Cluster{{asCamelCased side false}}CommandParse(cmd); | ||
break; | ||
{{/unless}} | ||
{{/if}} | ||
{{/all_user_clusters}} | ||
default: | ||
// Unrecognized cluster ID, error status will apply. | ||
break; | ||
} | ||
} | ||
return result; | ||
} | ||
|
||
// Cluster specific command parsing | ||
|
||
{{#all_user_clusters}} | ||
{{#if (isEnabled enabled)}} | ||
EmberAfStatus emberAf{{asCamelCased name false}}Cluster{{asCamelCased side false}}CommandParse(EmberAfClusterCommand * cmd) | ||
{ | ||
bool wasHandled = false; | ||
|
||
if (!cmd->mfgSpecific) | ||
{ | ||
switch (cmd->commandId) | ||
{ | ||
{{#all_user_cluster_commands}} | ||
{{#if (isStrEqual clusterName parent.name)}} | ||
{{#if (isCommandAvailable parent.side incoming outgoing commandSource name)}} | ||
case ZCL_{{asDelimitedMacro name}}_COMMAND_ID: { | ||
{{#if (zcl_command_arguments_count this.id)}} | ||
uint32_t argOffset = 0; | ||
{{#zcl_command_arguments}} | ||
{{asUnderlyingType type}} * {{asSymbol label}} = ({{asUnderlyingType type}} *)(cmd->buffer + argOffset); | ||
{{#unless (isLastElement index count)}} | ||
argOffset+= sizeof({{asUnderlyingType type}}); | ||
{{/unless}} | ||
{{/zcl_command_arguments}} | ||
|
||
wasHandled = emberAf{{asCamelCased parent.name false}}Cluster{{asCamelCased name false}}Callback({{#zcl_command_arguments}} *{{asSymbol label}}{{#unless (isLastElement index count)}}, {{/unless}}{{/zcl_command_arguments}}); | ||
{{else}} | ||
wasHandled = emberAf{{asCamelCased parent.name false}}Cluster{{asCamelCased name false}}Callback(); | ||
{{/if}} | ||
break; | ||
} | ||
{{/if}} | ||
{{/if}} | ||
{{/all_user_cluster_commands}} | ||
default: { | ||
// Unrecognized command ID, error status will apply. | ||
break; | ||
} | ||
} | ||
} | ||
return status(wasHandled, true, cmd->mfgSpecific); | ||
} | ||
{{/if}} | ||
{{/all_user_clusters}} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
{{chip_header}} | ||
|
||
// Prevent multiple inclusion | ||
#pragma once | ||
|
||
#include "af-types.h" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
{{chip_header}} | ||
|
||
#include "callback.h" | ||
#include "cluster-id.h" | ||
|
||
// Cluster Init Functions | ||
void emberAfClusterInitCallback(uint8_t endpoint, EmberAfClusterId clusterId) | ||
{ | ||
switch (clusterId) | ||
{ | ||
{{#all_user_clusters_names}} | ||
case ZCL_{{asDelimitedMacro define}}_ID : | ||
emberAf{{asCamelCased name false}}ClusterInitCallback(endpoint); | ||
break; | ||
{{/all_user_clusters_names}} | ||
default: | ||
// Unrecognized cluster ID | ||
break; | ||
} | ||
} | ||
|
||
{{#all_user_clusters_names}} | ||
void __attribute__((weak)) emberAf{{asCamelCased name false}}ClusterInitCallback(uint8_t endpoint) | ||
{ | ||
// To prevent warning | ||
(void) endpoint; | ||
} | ||
{{/all_user_clusters_names}} | ||
|
||
// Cluster Command callback | ||
|
||
{{#all_user_clusters}} | ||
{{#if (isEnabled enabled)}} | ||
{{#all_user_cluster_commands}} | ||
{{#if (isStrEqual clusterName parent.name)}} | ||
{{#if (isCommandAvailable parent.side incoming outgoing commandSource)}} | ||
/** | ||
* @brief {{parent.name}} Cluster {{name}} Command callback | ||
{{#if (zcl_command_arguments_count this.id)}} | ||
{{#zcl_command_arguments}} | ||
* @param {{asCamelCased label}} | ||
{{/zcl_command_arguments}} | ||
{{/if}} | ||
*/ | ||
|
||
{{#if (zcl_command_arguments_count this.id)}} | ||
bool __attribute__((weak)) emberAf{{asCamelCased parent.name false}}Cluster{{asCamelCased name false}}Callback({{#zcl_command_arguments}} {{asUnderlyingType type}} {{asSymbol label}}{{#unless (isLastElement index count)}}, {{/unless}}{{/zcl_command_arguments}}) | ||
{ | ||
// To prevent warning | ||
{{#zcl_command_arguments}} | ||
(void) {{asSymbol label}}; | ||
{{/zcl_command_arguments}} | ||
|
||
return false; | ||
} | ||
{{else}} | ||
bool __attribute__((weak)) emberAf{{asCamelCased parent.name false}}Cluster{{asCamelCased name false}}Callback(void) | ||
{ | ||
return false; | ||
} | ||
{{/if}} | ||
|
||
{{/if}} | ||
{{/if}} | ||
{{/all_user_cluster_commands}} | ||
{{/if}} | ||
{{/all_user_clusters}} |
Oops, something went wrong.