Skip to content

Commit

Permalink
DRAFT: WIP Support EventList for Matter
Browse files Browse the repository at this point in the history
  • Loading branch information
emargolis committed Jan 18, 2023
1 parent 81f263c commit 53cfd14
Show file tree
Hide file tree
Showing 5 changed files with 95 additions and 0 deletions.
12 changes: 12 additions & 0 deletions src-electron/generator/helper-endpointconfig.js
Original file line number Diff line number Diff line change
Expand Up @@ -562,6 +562,7 @@ async function collectAttributes(endpointTypes, options) {
attributeSize: 0,
mask: [],
commands: [],
events: [],
functions: 'NULL',
comment: `Endpoint: ${ept.endpointId}, Cluster: ${c.name} (${c.side})`,
}
Expand Down Expand Up @@ -847,6 +848,17 @@ async function collectAttributes(endpointTypes, options) {
commandMfgCodes.push(mfgCmd)
}
})

// Go over the events
c.events.sort(zclUtil.eventComparator)
c.events.forEach((ev) => {
let event = {
eventId: asMEI(ev.manufacturerCode, ev.code),
name: cmd.name,
}
cluster.events.push(event)
})

endpointAttributeSize += clusterAttributeSize
cluster.attributeSize = clusterAttributeSize
clusterList.push(cluster)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ const TestHelper = require('../../common/ClusterTestGeneration.js');
const kGlobalAttributes = [
0xfff8, // GeneratedCommandList
0xfff9, // AcceptedCommandList
0xfffa, // EventList
0xfffb, // AttributeList
0xfffc, // ClusterRevision
0xfffd, // FeatureMap
Expand Down Expand Up @@ -187,6 +188,37 @@ function chip_endpoint_generated_commands_list(options) {
return templateUtil.collectBlocks(ret, options, this);
}

function chip_endpoint_generated_event_count(options) {
let count = 0;
this.clusterList.forEach((c) => {
count += c.events.length
});
return count;
}

function chip_endpoint_generated_event_list(options) {
let ret = [];
let index = 0;
this.clusterList.forEach((c) => {
let events = [];

c.events.forEach((ev) => {
events.push(`${ev.eventId} /* ${ev.name} */`);
});

if (events.length > 0) {
ret.push({ text: ` /* ${c.comment} */\\` });
ret.push({
text: ` /* EventList (index=${index}) */ \\\n ${events.join(
', \\\n '
)}, \\`,
});
index += events.length;
}
});
return templateUtil.collectBlocks(ret, options, this);
}

/**
* Return endpoint config GENERATED_CLUSTER MACRO
* To be used as a replacement of endpoint_cluster_list since this one
Expand All @@ -195,6 +227,7 @@ function chip_endpoint_generated_commands_list(options) {
function chip_endpoint_cluster_list() {
let ret = '{ \\\n';
let totalCommands = 0;
let totalEvents = 0;
this.clusterList.forEach((c) => {
let mask = '';
let functionArray = c.functions;
Expand Down Expand Up @@ -258,6 +291,17 @@ function chip_endpoint_cluster_list() {
} )`;
}

let generatedEventListVal = 'nullptr';
let generatedEventCount = 0;
c.events.forEach((event) => {
generatedEventCount++;
});

if (generatedEventCount > 0) {
totalEvents += generatedEventCount;
generatedEventListVal = `ZAP_GENERATED_EVENTS_INDEX( ${totalEvents} )`;
}

ret = ret.concat(` { \\
/* ${c.comment} */ \\
.clusterId = ${c.clusterId}, \\
Expand All @@ -268,6 +312,8 @@ function chip_endpoint_cluster_list() {
.functions = ${functionArray}, \\
.acceptedCommandList = ${acceptedCommandsListVal} ,\\
.generatedCommandList = ${generatedCommandsListVal} ,\\
.eventList = ${generatedEventListVal}, \\
.eventCount = ${generatedEventCount}, \\
},\\\n`);

totalCommands = totalCommands + acceptedCommands + generatedCommands;
Expand Down Expand Up @@ -917,6 +963,10 @@ exports.chip_endpoint_cluster_list = chip_endpoint_cluster_list;
exports.chip_endpoint_data_version_count = chip_endpoint_data_version_count;
exports.chip_endpoint_generated_commands_list =
chip_endpoint_generated_commands_list;
exports.chip_endpoint_generated_event_count =
chip_endpoint_generated_event_count;
exports.chip_endpoint_generated_event_list =
chip_endpoint_generated_event_list;
exports.asTypedExpression = asTypedExpression;
exports.asTypedLiteral = asTypedLiteral;
exports.asLowerCamelCase = asLowerCamelCase;
Expand Down
18 changes: 18 additions & 0 deletions src-electron/util/zcl-util.js
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,23 @@ function commandComparator(a, b) {
return 0
}

/**
* Comparator for sorting events.
*
* @param {*} a
* @param {*} b
* @returns -1, 0 or 1
*/
function eventComparator(a, b) {
if (a.manufacturerCode < b.manufacturerCode) return -1
if (a.manufacturerCode > b.manufacturerCode) return 1

if (a.hexCode < b.hexCode) return -1
if (a.hexCode > b.hexCode) return 1

return 0
}

function findStructByName(structs, name) {
for (const s of structs) {
if (s.name == name) {
Expand Down Expand Up @@ -783,6 +800,7 @@ async function createCommandSignature(db, packageId, cmd) {
exports.clusterComparator = clusterComparator
exports.attributeComparator = attributeComparator
exports.commandComparator = commandComparator
exports.eventComparator = eventComparator
exports.sortStructsByDependency = sortStructsByDependency
exports.isEnum = isEnum
exports.isBitmap = isBitmap
Expand Down
5 changes: 5 additions & 0 deletions test/gen-template/matter/endpoint-config.zapt
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,11 @@

#define ZAP_GENERATED_COMMANDS_INDEX(index) ((chip::CommandId *) (&generatedCommands[index]))

#define GENERATED_EVENT_COUNT {{ chip_endpoint_generated_event_count }}
#define GENERATED_EVENTS {{ chip_endpoint_generated_event_list }}

#define ZAP_GENERATED_EVENTS_INDEX(index) ((chip::EventId *) (&generatedEvents[index]))

// Cluster function static arrays
#define GENERATED_FUNCTION_ARRAYS {{chip_endpoint_generated_functions}}

Expand Down
10 changes: 10 additions & 0 deletions test/helper-api-baseline.json
Original file line number Diff line number Diff line change
Expand Up @@ -272,6 +272,16 @@
"isDeprecated": false,
"category": "matter"
},
{
"name": "chip_endpoint_generated_event_count",
"isDeprecated": false,
"category": "matter"
},
{
"name": "chip_endpoint_generated_event_list",
"isDeprecated": false,
"category": "matter"
},
{
"name": "chip_endpoint_generated_functions",
"isDeprecated": false,
Expand Down

0 comments on commit 53cfd14

Please sign in to comment.