Skip to content

Commit e76a9f0

Browse files
authored
Adding helpers to generate cluster specific object files (#1603)
1 parent adca046 commit e76a9f0

File tree

6 files changed

+88
-0
lines changed

6 files changed

+88
-0
lines changed

docs/api.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8915,6 +8915,7 @@ This module contains the API for templating. For more detailed instructions, rea
89158915
* [~access_aggregate(options)](#module_Templating API_ Access helpers..access_aggregate)
89168916
* [~access(options)](#module_Templating API_ Access helpers..access)
89178917
* [~default_access(options)](#module_Templating API_ Access helpers..default_access) ⇒
8918+
* [~chip_get_access_role(options)](#module_Templating API_ Access helpers..chip_get_access_role) ⇒ <code>string</code>
89188919

89198920
<a name="module_Templating API_ Access helpers..collectDefaultAccessList"></a>
89208921

@@ -8979,6 +8980,18 @@ Get the access list information.
89798980
| --- | --- |
89808981
| options | <code>\*</code> |
89818982

8983+
<a name="module_Templating API_ Access helpers..chip_get_access_role"></a>
8984+
8985+
### Templating API: Access helpers~chip\_get\_access\_role(options) ⇒ <code>string</code>
8986+
Determines the access role for a given entity and operation.
8987+
8988+
**Kind**: inner method of [<code>Templating API: Access helpers</code>](#module_Templating API_ Access helpers)
8989+
**Returns**: <code>string</code> - The access role.
8990+
8991+
| Param | Type |
8992+
| --- | --- |
8993+
| options | <code>\*</code> |
8994+
89828995
<a name="module_Templating API_ Attribute helpers"></a>
89838996

89848997
## Templating API: Attribute helpers

docs/helpers.md

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ This module contains the API for templating. For more detailed instructions, rea
5454
* [~access_aggregate(options)](#module_Templating API_ Access helpers..access_aggregate)
5555
* [~access(options)](#module_Templating API_ Access helpers..access)
5656
* [~default_access(options)](#module_Templating API_ Access helpers..default_access) ⇒
57+
* [~chip_get_access_role(options)](#module_Templating API_ Access helpers..chip_get_access_role) ⇒ <code>string</code>
5758

5859
<a name="module_Templating API_ Access helpers..collectDefaultAccessList"></a>
5960

@@ -118,6 +119,18 @@ Get the access list information.
118119
| --- | --- |
119120
| options | <code>\*</code> |
120121

122+
<a name="module_Templating API_ Access helpers..chip_get_access_role"></a>
123+
124+
### Templating API: Access helpers~chip\_get\_access\_role(options) ⇒ <code>string</code>
125+
Determines the access role for a given entity and operation.
126+
127+
**Kind**: inner method of [<code>Templating API: Access helpers</code>](#module_Templating API_ Access helpers)
128+
**Returns**: <code>string</code> - The access role.
129+
130+
| Param | Type |
131+
| --- | --- |
132+
| options | <code>\*</code> |
133+
121134
<a name="module_Templating API_ Attribute helpers"></a>
122135

123136
## Templating API: Attribute helpers

src-electron/generator/helper-access.js

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,33 @@ async function default_access(options) {
237237
return templateUtil.templatePromise(this.global, p)
238238
}
239239

240+
/**
241+
* Determines the access role for a given entity and operation.
242+
*
243+
* @param {*} options
244+
* @returns {string} The access role.
245+
*/
246+
async function chip_get_access_role(options) {
247+
if (!('op' in options.hash)) {
248+
throw new Error('Access helper requires op from the op="<op>" option.')
249+
}
250+
251+
const op = options.hash.op
252+
const accessList = await collectAccesslist(this, options)
253+
const accessForOp = accessList.find((a) => a.operation === op)
254+
255+
if (accessForOp?.role) {
256+
return accessForOp.role
257+
}
258+
259+
if ('default' in options.hash) {
260+
return options.hash.default
261+
}
262+
263+
return ''
264+
}
265+
240266
exports.access = access
241267
exports.access_aggregate = access_aggregate
242268
exports.default_access = default_access
269+
exports.chip_get_access_role = chip_get_access_role

src-electron/generator/matter/app/zap-templates/templates/app/helper.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -594,6 +594,20 @@ function asUpperCamelCase(label, options) {
594594
const preserveAcronyms = options && options.hash.preserveAcronyms;
595595
return asCamelCase(label, false, preserveAcronyms);
596596
}
597+
/**
598+
* Same as asUpperCamelCase, but with a special case for "RFID".
599+
* Special case for cluster specific object files for Matter.
600+
*
601+
* @param {*} label
602+
* @param {*} options
603+
* @returns {string}
604+
*/
605+
function chip_name_for_id_usage(label, options) {
606+
if (label == 'RFID') {
607+
return 'Rfid';
608+
}
609+
return asUpperCamelCase(label, options);
610+
}
597611

598612
function chip_friendly_endpoint_type_name(options) {
599613
let name = this.endpointTypeName;
@@ -1272,6 +1286,7 @@ exports.zcl_commands_that_need_timed_invoke =
12721286
zcl_commands_that_need_timed_invoke;
12731287
exports.if_is_fabric_scoped_struct = if_is_fabric_scoped_struct;
12741288
exports.if_is_non_zero_default = if_is_non_zero_default;
1289+
exports.chip_name_for_id_usage = chip_name_for_id_usage;
12751290

12761291
exports.meta = {
12771292
category: dbEnum.helperCategory.matter,

test/gen-matter-3-1.test.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -570,6 +570,14 @@ test(
570570
zclPackageId
571571
)
572572
expect(globalBitmap.id).not.toEqual(clusterBitmap.id)
573+
574+
// Testing chip_get_access_role for attributes
575+
expect(ept).toContain(
576+
'Name - Acl, Read Privilege - Administer, Write Privilege - Administer'
577+
)
578+
579+
// Testing chip_get_access_role for commands
580+
expect(ept).toContain('Name - KeySetWrite, Invoke Privilege - Administer')
573581
},
574582
testUtil.timeout.long()
575583
)

test/gen-template/matter3/miscellaneous_helper_tests.zapt

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,3 +46,15 @@ SemanticTagStruct item {{index}} from Identify cluster: {{name}}
4646
{{#if struct_contains_array}} Struct with array: {{name}}
4747
{{/if}}
4848
{{/zcl_structs}}
49+
50+
// Test chip_get_access_role for attributes
51+
{{#zcl_attributes_server}}
52+
{{#if clusterRef}}
53+
Name - {{asUpperCamelCase label}}, Read Privilege - {{asUpperCamelCase (chip_get_access_role entity="attribute" op="read" default="view")}}, {{#if isWritableAttribute}}Write Privilege - {{asUpperCamelCase (chip_get_access_role entity="attribute" op="write" default="operate")}}{{/if}}
54+
{{/if}}
55+
{{/zcl_attributes_server}}
56+
57+
// Test chip_get_access_role for commands
58+
{{#zcl_commands_source_client}}
59+
Name - {{asUpperCamelCase name}}, Invoke Privilege - {{asUpperCamelCase (chip_get_access_role entity="command" op="invoke" default="operate")}}
60+
{{/zcl_commands_source_client}}

0 commit comments

Comments
 (0)