From 5cbeecf1e40ffbcb27cf45553934c0a984bb9177 Mon Sep 17 00:00:00 2001 From: Paul Regan Date: Wed, 21 Aug 2024 10:22:06 -0400 Subject: [PATCH 1/6] update XMl to be consistent with the Matter spec --- zcl-builtin/matter/data-model/chip/matter-devices.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/zcl-builtin/matter/data-model/chip/matter-devices.xml b/zcl-builtin/matter/data-model/chip/matter-devices.xml index 51c224fb38..f04ce55c50 100644 --- a/zcl-builtin/matter/data-model/chip/matter-devices.xml +++ b/zcl-builtin/matter/data-model/chip/matter-devices.xml @@ -2052,7 +2052,7 @@ limitations under the License. Endpoint tree - + 0x0071 From 2cffd8aca585eebcdae807cef30e57a775da0a76 Mon Sep 17 00:00:00 2001 From: Paul Regan Date: Wed, 21 Aug 2024 10:53:07 -0400 Subject: [PATCH 2/6] loading conformance and constraint of Matter Device Composition and inserting into the database --- src-electron/db/query-loader.js | 173 ++++++----- src-electron/db/zap-schema.sql | 5 +- src-electron/zcl/zcl-loader-silabs.js | 294 +++++++++--------- .../matter/data-model/chip/matter-devices.xml | 2 +- 4 files changed, 243 insertions(+), 231 deletions(-) diff --git a/src-electron/db/query-loader.js b/src-electron/db/query-loader.js index 40853f8e3d..5652ec2334 100644 --- a/src-electron/db/query-loader.js +++ b/src-electron/db/query-loader.js @@ -327,7 +327,7 @@ async function insertAttributeAccessData(db, packageId, accessData) { return dbApi.dbMultiInsert( db, `INSERT INTO ATTRIBUTE_ACCESS (ATTRIBUTE_REF, ACCESS_REF) VALUES (?,?)`, - insertData, + insertData ) } @@ -342,7 +342,7 @@ async function insertCommandAccessData(db, packageId, accessData) { return dbApi.dbMultiInsert( db, `INSERT INTO COMMAND_ACCESS (COMMAND_REF, ACCESS_REF) VALUES (?,?)`, - insertData, + insertData ) } // access data is array of objects, containing id/op/role/modifier @@ -356,7 +356,7 @@ async function insertEventAccessData(db, packageId, accessData) { return dbApi.dbMultiInsert( db, `INSERT INTO EVENT_ACCESS (EVENT_REF, ACCESS_REF) VALUES (?,?)`, - insertData, + insertData ) } @@ -427,7 +427,7 @@ async function insertAttributeMappings(db, data) { VALUES (${selectAttributeIdQuery}, ${selectAttributeIdQuery}) `, - data, + data ) } @@ -557,9 +557,9 @@ async function insertClusterExtensions(db, packageId, knownPackages, data) { .dbMultiSelect( db, `SELECT CLUSTER_ID FROM CLUSTER WHERE PACKAGE_REF IN (${dbApi.toInClause( - knownPackages, + knownPackages )}) AND CODE = ?`, - data.map((cluster) => [cluster.code]), + data.map((cluster) => [cluster.code]) ) .then((rows) => { let commands = { @@ -619,7 +619,7 @@ async function insertClusterExtensions(db, packageId, knownPackages, data) { 'WARNING', message, packageId, - 2, + 2 ) } } @@ -663,7 +663,7 @@ async function insertClusters(db, packageId, data) { packageId, cluster.apiMaturity, ] - }), + }) ) .then((lastIdsArray) => { let commands = { @@ -742,7 +742,7 @@ async function insertFeatures(db, packageId, data, clusterId) { feature.description, feature.conformance, clusterId, - ]), + ]) ) } @@ -758,7 +758,7 @@ async function insertTags(db, packageId, data, clusterRef) { return dbApi.dbMultiInsert( db, 'INSERT INTO TAG (PACKAGE_REF, CLUSTER_REF, NAME, DESCRIPTION) VALUES (?, ?, ?, ?)', - data.map((tag) => [packageId, clusterRef, tag.name, tag.description]), + data.map((tag) => [packageId, clusterRef, tag.name, tag.description]) ) } @@ -777,7 +777,7 @@ async function insertDomains(db, packageId, data) { return dbApi.dbMultiInsert( db, 'INSERT OR IGNORE INTO DOMAIN (PACKAGE_REF, NAME, LATEST_SPEC_REF) VALUES (?, ?, (SELECT SPEC_ID FROM SPEC WHERE PACKAGE_REF = ? AND CODE = ? ))', - data.map((domain) => [packageId, domain.name, packageId, domain.specCode]), + data.map((domain) => [packageId, domain.name, packageId, domain.specCode]) ) } @@ -805,7 +805,7 @@ async function insertSpecs(db, packageId, data) { older.specCode, older.specDescription, older.specCertifiable ? 1 : 0, - ]), + ]) ) } return dbApi.dbMultiInsert( @@ -816,7 +816,7 @@ async function insertSpecs(db, packageId, data) { domain.specCode, domain.specDescription, domain.specCertifiable ? 1 : 0, - ]), + ]) ) } @@ -853,7 +853,7 @@ async function insertGlobalAttributeDefault(db, packageId, clusterData) { ( SELECT ATTRIBUTE_ID FROM ATTRIBUTE WHERE PACKAGE_REF = ? AND CODE = ? AND SIDE = ? ), ?) `, - args, + args ) .then((individualGaIds) => { let featureBitArgs = [] @@ -890,7 +890,7 @@ INSERT OR IGNORE INTO GLOBAL_ATTRIBUTE_BIT ( (SELECT TAG_ID FROM TAG WHERE PACKAGE_REF = ? AND NAME = ?) ) `, - featureBitArgs, + featureBitArgs ) } }) @@ -923,7 +923,7 @@ async function insertAtomics(db, packageId, data) { at.isString, at.isLong, at.isChar, - ]), + ]) ) } @@ -943,13 +943,13 @@ function insertEndpointComposition(db, composition, context) { return dbApi.dbInsert( db, 'INSERT INTO ENDPOINT_COMPOSITION (TYPE, CODE) VALUES (?, ?)', - [dbEnum.composition.mandatoryEndpoint, composition.code], + [dbEnum.composition.mandatoryEndpoint, composition.code] ) } else { return dbApi.dbInsert( db, 'INSERT INTO ENDPOINT_COMPOSITION (TYPE, CODE) VALUES (?, ?)', - [composition.compositionType, composition.code], + [composition.compositionType, composition.code] ) } } @@ -969,23 +969,36 @@ async function getEndpointCompositionIdByCode(db, deviceType) { } /** - * Inserts a new device composition record into the database. + * Inserts a device composition record into the DEVICE_COMPOSITION table. + * + * This function constructs an SQL INSERT query to add a new record to the + * DEVICE_COMPOSITION table. It handles the insertion of the device code, + * endpoint composition reference, conformance, and constraint values. + * Note that the "CONSTRAINT" column name is escaped with double quotes + * to avoid conflicts with the SQL reserved keyword. * * @param {Object} db - The database connection object. - * @param {Object} deviceType - An object representing the device type, which contains the 'childDeviceId' property. - * @param {number} endpointCompositionId - The ID of the endpoint composition associated with this device composition. - * @returns {Promise} A promise that resolves with the result of the database insertion operation. + * @param {Object} deviceType - The device type object containing the data to be inserted. + * @param {number} endpointCompositionId - The ID of the endpoint composition. + * @returns {Promise} A promise that resolves when the insertion is complete. */ function insertDeviceComposition(db, deviceType, endpointCompositionId) { const insertQuery = ` - INSERT INTO DEVICE_COMPOSITION (CODE, ENDPOINT_COMPOSITION_REF) - VALUES (?, ?) + INSERT INTO DEVICE_COMPOSITION (CODE, ENDPOINT_COMPOSITION_REF, CONFORMANCE, DEVICE_CONSTRAINT) + VALUES (?, ?, ?, ?) ` - return dbApi.dbInsert(db, insertQuery, [ - parseInt(deviceType.childDeviceId, 16), - endpointCompositionId, - ]) + try { + return dbApi.dbInsert(db, insertQuery, [ + parseInt(deviceType.childDeviceId, 16), + endpointCompositionId, + deviceType.conformance, + deviceType.constraint, + ]) + } catch (error) { + console.error('Error inserting device composition:', error) + throw error // Re-throw the error after logging it + } } /** @@ -1014,7 +1027,7 @@ async function insertDeviceTypes(db, packageId, data) { dt.scope, dt.superset, ] - }), + }) ) .then((lastIdsArray) => { let zclIdsPromises = [] @@ -1037,20 +1050,20 @@ async function insertDeviceTypes(db, packageId, data) { cluster.clientLocked, cluster.serverLocked, ], - true, + true ) .then((deviceTypeClusterRef) => { return { dtClusterRef: deviceTypeClusterRef, clusterData: cluster, } - }), - ), + }) + ) ) .then((dtClusterRefDataPairs) => { let promises = [] promises.push( - insertDeviceTypeAttributes(db, dtClusterRefDataPairs), + insertDeviceTypeAttributes(db, dtClusterRefDataPairs) ) promises.push(insertDeviceTypeCommands(db, dtClusterRefDataPairs)) promises.push(insertDeviceTypeFeatures(db, dtClusterRefDataPairs)) @@ -1106,7 +1119,7 @@ async function insertDeviceTypeFeatures(db, dtClusterRefDataPairs) { return dbApi.dbMultiInsert( db, 'INSERT INTO DEVICE_TYPE_FEATURE (DEVICE_TYPE_CLUSTER_REF, FEATURE_CODE) VALUES (?, ?)', - features, + features ) } @@ -1130,7 +1143,7 @@ async function insertDeviceTypeAttributes(db, dtClusterRefDataPairs) { return dbApi.dbMultiInsert( db, 'INSERT INTO DEVICE_TYPE_ATTRIBUTE (DEVICE_TYPE_CLUSTER_REF, ATTRIBUTE_NAME) VALUES (?, ?)', - attributes, + attributes ) } @@ -1154,7 +1167,7 @@ async function insertDeviceTypeCommands(db, dtClusterRefDataPairs) { return dbApi.dbMultiInsert( db, 'INSERT INTO DEVICE_TYPE_COMMAND (DEVICE_TYPE_CLUSTER_REF, COMMAND_NAME) VALUES (?, ?)', - commands, + commands ) } @@ -1168,7 +1181,7 @@ INSERT INTO OPERATION VALUES (?, ?, ?) `, - data, + data ) } @@ -1182,7 +1195,7 @@ INSERT INTO ROLE VALUES (?, ?, ?, ?) `, - data, + data ) } @@ -1196,7 +1209,7 @@ INSERT INTO ACCESS_MODIFIER VALUES (?, ?, ?) `, - data, + data ) } @@ -1218,14 +1231,7 @@ VALUES ( (SELECT ACCESS_MODIFIER_ID FROM ACCESS_MODIFIER WHERE NAME = ? AND PACKAGE_REF = ?) ) `, - data.map((x) => [ - x.op, - packageId, - x.role, - packageId, - x.modifier, - packageId, - ]), + data.map((x) => [x.op, packageId, x.role, packageId, x.modifier, packageId]) ) } @@ -1241,7 +1247,7 @@ async function insertDefaultAccess(db, packageId, defaultAccess) { return dbApi.dbMultiInsert( db, `INSERT INTO DEFAULT_ACCESS ( PACKAGE_REF, ENTITY_TYPE, ACCESS_REF) VALUES (?, ?, ?)`, - ids.map((id) => [packageId, defaultAccess.type, id]), + ids.map((id) => [packageId, defaultAccess.type, id]) ) } @@ -1277,7 +1283,7 @@ WHERE ) = ? `, - [packageId, packageId], + [packageId, packageId] ) } @@ -1298,7 +1304,7 @@ async function insertDataTypeDiscriminator(db, packageId, data) { return dbApi.dbMultiInsert( db, 'INSERT OR IGNORE INTO DISCRIMINATOR (PACKAGE_REF, NAME) VALUES (?, ?)', - data.map((at) => [packageId, at.name]), + data.map((at) => [packageId, at.name]) ) } @@ -1316,12 +1322,7 @@ async function insertDataType(db, packageId, data) { const lastIdsArray = await dbApi.dbMultiInsert( db, 'INSERT INTO DATA_TYPE (PACKAGE_REF, NAME, DESCRIPTION, DISCRIMINATOR_REF) VALUES ( ?, ?, ?, ?)', - data.map((at) => [ - packageId, - at.name, - at.description, - at.discriminator_ref, - ]), + data.map((at) => [packageId, at.name, at.description, at.discriminator_ref]) ) let clustersToLoad = [] @@ -1337,7 +1338,7 @@ async function insertDataType(db, packageId, data) { return dbApi.dbMultiInsert( db, `INSERT INTO DATA_TYPE_CLUSTER (DATA_TYPE_REF, CLUSTER_CODE) VALUES (?, ?)`, - clustersToLoad, + clustersToLoad ) return lastIdsArray } @@ -1368,7 +1369,7 @@ VALUES ( at.discriminator_ref, at.size, at.is_signed, - ]), + ]) ) } @@ -1400,7 +1401,7 @@ VALUES ( at.is_long, at.size, at.is_char, - ]), + ]) ) } @@ -1423,7 +1424,7 @@ VALUES ( AND NAME = ? AND DISCRIMINATOR_REF = ?), ?)`, - data.map((at) => [packageId, at.name, at.discriminator_ref, at.size]), + data.map((at) => [packageId, at.name, at.discriminator_ref, at.size]) ) } @@ -1447,18 +1448,18 @@ VALUES ( CASE WHEN (${SELECT_CLUSTER_SPECIFIC_DATA_TYPE} AND PACKAGE_REF IN (${dbApi.toInClause( - packageIds, - )})) + packageIds + )})) IS NULL THEN (${SELECT_GENERIC_DATA_TYPE} AND PACKAGE_REF IN (${dbApi.toInClause( - packageIds, - )})) + packageIds + )})) ELSE (${SELECT_CLUSTER_SPECIFIC_DATA_TYPE} AND PACKAGE_REF IN (${dbApi.toInClause( - packageIds, - )})) + packageIds + )})) END AS DATA_TYPE_ID), (SELECT CASE @@ -1487,7 +1488,7 @@ VALUES ( ENUM.ENUM_ID = DATA_TYPE.DATA_TYPE_ID WHERE DATA_TYPE.PACKAGE_REF IN (${dbApi.toInClause( - packageIds, + packageIds )}) AND DATA_TYPE.NAME = ?) ELSE (SELECT @@ -1517,7 +1518,7 @@ VALUES ( at.type, at.type, at.discriminator_ref, - ]), + ]) ) } @@ -1620,7 +1621,7 @@ AND at.name, at.value, at.fieldIdentifier, - ]), + ]) ) } @@ -1646,7 +1647,7 @@ VALUES ( DATA_TYPE WHERE PACKAGE_REF = ? AND NAME = ? AND DISCRIMINATOR_REF = ?), ?)`, - data.map((at) => [packageId, at.name, at.discriminator_ref, at.size]), + data.map((at) => [packageId, at.name, at.discriminator_ref, at.size]) ) } @@ -1669,18 +1670,18 @@ async function insertBitmap(db, packageIds, data) { CASE WHEN (${SELECT_CLUSTER_SPECIFIC_DATA_TYPE} AND PACKAGE_REF IN (${dbApi.toInClause( - packageIds, - )})) + packageIds + )})) IS NULL THEN (${SELECT_GENERIC_DATA_TYPE} AND PACKAGE_REF IN (${dbApi.toInClause( - packageIds, - )})) + packageIds + )})) ELSE (${SELECT_CLUSTER_SPECIFIC_DATA_TYPE} AND PACKAGE_REF IN (${dbApi.toInClause( - packageIds, - )})) + packageIds + )})) END AS DATA_TYPE_ID), (SELECT CASE @@ -1738,7 +1739,7 @@ async function insertBitmap(db, packageIds, data) { at.type, at.type, at.discriminator_ref, - ]), + ]) ) } @@ -1845,7 +1846,7 @@ async function insertBitmapFields(db, packageId, knownPackages, data) { at.mask, at.fieldIdentifier, at.type, - ]), + ]) ) } @@ -1867,18 +1868,18 @@ VALUES ( CASE WHEN (${SELECT_CLUSTER_SPECIFIC_DATA_TYPE} AND PACKAGE_REF IN (${dbApi.toInClause( - packageIds, - )})) + packageIds + )})) IS NULL THEN (${SELECT_GENERIC_DATA_TYPE} AND PACKAGE_REF IN (${dbApi.toInClause( - packageIds, - )})) + packageIds + )})) ELSE (${SELECT_CLUSTER_SPECIFIC_DATA_TYPE} AND PACKAGE_REF IN (${dbApi.toInClause( - packageIds, - )})) + packageIds + )})) END AS DATA_TYPE_ID), (SELECT CASE @@ -1939,7 +1940,7 @@ VALUES ( at.discriminator_ref, dbApi.toDbBool(at.isFabricScoped), at.apiMaturity, - ]), + ]) ) } @@ -2067,7 +2068,7 @@ async function insertStructItems(db, packageIds, data) { at.isFabricSensitive, at.size, at.type, - ]), + ]) ) } diff --git a/src-electron/db/zap-schema.sql b/src-electron/db/zap-schema.sql index b03a0b9c66..160650cadd 100644 --- a/src-electron/db/zap-schema.sql +++ b/src-electron/db/zap-schema.sql @@ -394,10 +394,11 @@ CREATE TABLE IF NOT EXISTS "ENDPOINT_COMPOSITION" ( Columns: DEVICE_COMPOSITION_ID: The primary key of the table, auto-incremented for each new record. + CODE: An integer representing the device code. DEVICE_TYPE_REF: An integer that acts as a foreign key to reference a specific device type. ENDPOINT_COMPOSITION_REF: A foreign key linking to the ENDPOINT_COMPOSITION table to specify the endpoint composition associated with this device. CONFORMANCE: A text field describing the conformance level of the device composition. - CONSTRAINT: An integer representing any constraints applied to the device composition. + DEVICE_CONSTRAINT: An integer representing any constraints applied to the device composition. Foreign Key Constraints: The DEVICE_TYPE_REF column references the DEVICE_TYPE_ID column of the DEVICE_TYPE table. On deletion of a device type, corresponding records in this table are deleted (CASCADE). @@ -409,7 +410,7 @@ CREATE TABLE IF NOT EXISTS "DEVICE_COMPOSITION" ( "DEVICE_TYPE_REF" integer, "ENDPOINT_COMPOSITION_REF" integer, "CONFORMANCE" text, - "CONSTRAINT" integer, + "DEVICE_CONSTRAINT" integer, FOREIGN KEY ("ENDPOINT_COMPOSITION_REF") REFERENCES "ENDPOINT_COMPOSITION"("ENDPOINT_COMPOSITION_ID") ON DELETE CASCADE FOREIGN KEY ("DEVICE_TYPE_REF") REFERENCES "DEVICE_TYPE"("DEVICE_TYPE_ID") ON DELETE CASCADE ); diff --git a/src-electron/zcl/zcl-loader-silabs.js b/src-electron/zcl/zcl-loader-silabs.js index dcf51b1332..49626fc2b9 100644 --- a/src-electron/zcl/zcl-loader-silabs.js +++ b/src-electron/zcl/zcl-loader-silabs.js @@ -49,7 +49,7 @@ async function collectDataFromJsonFile(metadataFile, data) { let fileLocations if (Array.isArray(obj.xmlRoot)) { fileLocations = obj.xmlRoot.map((p) => - path.join(path.dirname(metadataFile), p), + path.join(path.dirname(metadataFile), p) ) } else { fileLocations = [path.join(path.dirname(metadataFile), obj.xmlRoot)] @@ -107,7 +107,7 @@ async function collectDataFromJsonFile(metadataFile, data) { // If it's missing, 'optional' is a default reporting policy. if ('defaultReportingPolicy' in obj) { returnObject.defaultReportingPolicy = dbEnum.reportingPolicy.resolve( - obj.defaultReportingPolicy, + obj.defaultReportingPolicy ) } returnObject.version = obj.version @@ -170,14 +170,14 @@ async function collectDataFromJsonFile(metadataFile, data) { if ('newXmlFile' in obj) { returnObject.newXmlFile = obj.newXmlFile.map((f) => - path.join(path.dirname(metadataFile), f), + path.join(path.dirname(metadataFile), f) ) } else { returnObject.newXmlFile = [] } env.logDebug( - `Resolving: ${returnObject.zclFiles}, version: ${returnObject.version}`, + `Resolving: ${returnObject.zclFiles}, version: ${returnObject.version}` ) return returnObject @@ -211,7 +211,7 @@ async function collectDataFromPropertiesFile(metadataFile, data) { zclProps.xmlFile.split(',').forEach((singleXmlFile) => { let fullPath = util.locateRelativeFilePath( fileLocations, - singleXmlFile, + singleXmlFile ) if (fullPath != null) zclFiles.push(fullPath) }) @@ -220,7 +220,7 @@ async function collectDataFromPropertiesFile(metadataFile, data) { // Manufacturers XML file. f = util.locateRelativeFilePath( fileLocations, - zclProps.manufacturersXml, + zclProps.manufacturersXml ) if (f != null) returnObject.manufacturersXml = f @@ -257,7 +257,7 @@ async function collectDataFromPropertiesFile(metadataFile, data) { automaticallyCreateFields: false, } env.logDebug( - `Resolving: ${returnObject.zclFiles}, version: ${returnObject.version}`, + `Resolving: ${returnObject.zclFiles}, version: ${returnObject.version}` ) resolve(returnObject) } @@ -319,7 +319,7 @@ async function processAtomics(db, filePath, packageId, data) { return queryLoader.insertAtomics( db, packageId, - types.map((x) => prepareAtomic(x)), + types.map((x) => prepareAtomic(x)) ) } @@ -359,10 +359,10 @@ function prepareClusterGlobalAttribute(cluster) { if (ga.$.side == dbEnum.side.either) { ret.globalAttribute.push( - Object.assign({ side: dbEnum.side.client }, at), + Object.assign({ side: dbEnum.side.client }, at) ) ret.globalAttribute.push( - Object.assign({ side: dbEnum.side.server }, at), + Object.assign({ side: dbEnum.side.server }, at) ) } else { ret.globalAttribute.push(Object.assign({ side: ga.$.side }, at)) @@ -576,7 +576,7 @@ function prepareCluster(cluster, context, isExtension = false) { reportingPolicy = dbEnum.reportingPolicy.optional } else if (attribute.$.reportingPolicy != null) { reportingPolicy = dbEnum.reportingPolicy.resolve( - attribute.$.reportingPolicy, + attribute.$.reportingPolicy ) } let storagePolicy = dbEnum.storagePolicy.any @@ -648,7 +648,7 @@ function prepareCluster(cluster, context, isExtension = false) { att.name + ' in xml. \ Currently defaulting to a max length of 253 for long strings instead of 65534 \ - for space conservation and no support available for long strings in zigbee pro.', + for space conservation and no support available for long strings in zigbee pro.' ) att.maxLength = 253 } else { @@ -659,7 +659,7 @@ function prepareCluster(cluster, context, isExtension = false) { att.name + ' in xml. \ Currently defaulting to a max length of 1024 for long strings instead of 65534 \ - for space conservation.', + for space conservation.' ) att.maxLength = 1024 } @@ -717,7 +717,7 @@ async function processClusters(db, filePath, packageId, data, context) { context.clustersLoadedFromNewFiles.includes(cluster.code) ) { env.logDebug( - `Bypassing loading of cluster ${cluster.code} from old files.`, + `Bypassing loading of cluster ${cluster.code} from old files.` ) return false } else { @@ -767,16 +767,16 @@ async function processClusterExtensions( dataPackageId, knownPackages, data, - context, + context ) { env.logDebug( - `${filePath}, ${dataPackageId}: ${data.length} cluster extensions.`, + `${filePath}, ${dataPackageId}: ${data.length} cluster extensions.` ) return queryLoader.insertClusterExtensions( db, dataPackageId, knownPackages, - data.map((x) => prepareCluster(x, context, true)), + data.map((x) => prepareCluster(x, context, true)) ) } @@ -795,7 +795,7 @@ async function processGlobals(db, filePath, packageId, data, context) { return queryLoader.insertGlobals( db, packageId, - data.map((x) => prepareCluster(x, context, true)), + data.map((x) => prepareCluster(x, context, true)) ) } @@ -817,7 +817,7 @@ async function processDefaultAccess( db, filePath, packageId, - defaultAccessList, + defaultAccessList ) { let p = [] for (const da of defaultAccessList) { @@ -844,7 +844,7 @@ async function processAccessControl( db, filePath, packageId, - accessControlList, + accessControlList ) { let operations = [] let roles = [] @@ -987,7 +987,7 @@ async function processDataTypeDiscriminator(db, packageId, zclDataTypes) { return queryLoader.insertDataTypeDiscriminator( db, packageId, - types.map((x) => prepareDataTypeDiscriminator(x)), + types.map((x) => prepareDataTypeDiscriminator(x)) ) } @@ -1030,8 +1030,8 @@ function prepareDataType(a, dataType, typeMap) { cluster_code: a.cluster ? a.cluster : a.$.cluster_code - ? [{ $: { code: a.$.cluster_code[0] } }] - : null, // else case: Treating features in a cluster as a bitmap + ? [{ $: { code: a.$.cluster_code[0] } }] + : null, // else case: Treating features in a cluster as a bitmap } } @@ -1052,7 +1052,7 @@ async function processDataType( packageId, knownPackages, data, - dataType, + dataType ) { let typeMap = await zclLoader.getDiscriminatorMap(db, knownPackages) @@ -1062,7 +1062,7 @@ async function processDataType( return queryLoader.insertDataType( db, packageId, - types.map((x) => prepareDataType(x, 0, typeMap)), + types.map((x) => prepareDataType(x, 0, typeMap)) ) } else if (dataType == dbEnum.zclType.enum) { env.logDebug(`${filePath}, ${packageId}: ${data.length} Enum Data Types.`) @@ -1070,8 +1070,8 @@ async function processDataType( db, packageId, data.map((x) => - prepareDataType(x, typeMap.get(dbEnum.zclType.enum), typeMap), - ), + prepareDataType(x, typeMap.get(dbEnum.zclType.enum), typeMap) + ) ) } else if (dataType == dbEnum.zclType.bitmap) { env.logDebug(`${filePath}, ${packageId}: ${data.length} Bitmap Data Types.`) @@ -1079,8 +1079,8 @@ async function processDataType( db, packageId, data.map((x) => - prepareDataType(x, typeMap.get(dbEnum.zclType.bitmap), typeMap), - ), + prepareDataType(x, typeMap.get(dbEnum.zclType.bitmap), typeMap) + ) ) } else if (dataType == dbEnum.zclType.struct) { env.logDebug(`${filePath}, ${packageId}: ${data.length} Struct Data Types.`) @@ -1088,8 +1088,8 @@ async function processDataType( db, packageId, data.map((x) => - prepareDataType(x, typeMap.get(dbEnum.zclType.struct), typeMap), - ), + prepareDataType(x, typeMap.get(dbEnum.zclType.struct), typeMap) + ) ) } else if (dataType == dbEnum.zclType.string) { env.logDebug(`${filePath}, ${packageId}: ${data.length} String Data Types.`) @@ -1097,19 +1097,19 @@ async function processDataType( db, packageId, data.map((x) => - prepareDataType(x, typeMap.get(dbEnum.zclType.string), typeMap), - ), + prepareDataType(x, typeMap.get(dbEnum.zclType.string), typeMap) + ) ) } else { env.logError( - 'Could not find the discriminator for the data type: ' + dataType, + 'Could not find the discriminator for the data type: ' + dataType ) queryPackageNotification.setNotification( dnb, 'ERROR', 'Could not find the discriminator for the data type: ' + dataType, packageId, - 1, + 1 ) } } @@ -1138,8 +1138,8 @@ function prepareNumber(a, dataType) { ? 1 : 0 : isSignedException || /^int[0-9]{1,2}s?$/.test(a.$.name) - ? 1 - : 0, + ? 1 + : 0, name: a.$.name, cluster_code: a.cluster ? a.cluster : null, discriminator_ref: dataType, @@ -1170,7 +1170,7 @@ async function processNumber(db, filePath, packageId, knownPackages, data) { return queryLoader.insertNumber( db, packageId, - numbers.map((x) => prepareNumber(x, typeMap.get(dbEnum.zclType.number))), + numbers.map((x) => prepareNumber(x, typeMap.get(dbEnum.zclType.number))) ) } @@ -1214,7 +1214,7 @@ async function processString(db, filePath, packageId, knownPackages, data) { return queryLoader.insertString( db, packageId, - strings.map((x) => prepareString(x, typeMap.get(dbEnum.zclType.string))), + strings.map((x) => prepareString(x, typeMap.get(dbEnum.zclType.string))) ) } @@ -1254,8 +1254,8 @@ async function processEnumAtomic(db, filePath, packageId, knownPackages, data) { db, packageId, enums.map((x) => - prepareEnumOrBitmapAtomic(x, typeMap.get(dbEnum.zclType.enum)), - ), + prepareEnumOrBitmapAtomic(x, typeMap.get(dbEnum.zclType.enum)) + ) ) } @@ -1286,7 +1286,7 @@ function prepareEnumOrBitmap(db, packageId, a, dataType, typeMap) { 'WARNING', message, packageId, - 2, + 2 ) a.$.type = 'enum' + a.$.type.toLowerCase().match(/\d+/g).join('') } @@ -1296,8 +1296,8 @@ function prepareEnumOrBitmap(db, packageId, a, dataType, typeMap) { cluster_code: a.cluster ? a.cluster : a.$.cluster_code - ? [{ $: { code: a.$.cluster_code[0] } }] - : null, // else case: Treating features in a cluster as a bitmap + ? [{ $: { code: a.$.cluster_code[0] } }] + : null, // else case: Treating features in a cluster as a bitmap discriminator_ref: dataType, } } @@ -1324,9 +1324,9 @@ async function processEnum(db, filePath, packageId, knownPackages, data) { packageId, x, typeMap.get(dbEnum.zclType.enum), - typeMap, - ), - ), + typeMap + ) + ) ) } @@ -1377,21 +1377,21 @@ async function processBitmapAtomic( filePath, packageId, knownPackages, - data, + data ) { let typeMap = await zclLoader.getDiscriminatorMap(db, knownPackages) let bitmaps = data[0].type.filter(function (item) { return item.$.name.toLowerCase().includes(dbEnum.zclType.bitmap) }) env.logDebug( - `${filePath}, ${packageId}: ${data.length} Baseline Bitmap Types.`, + `${filePath}, ${packageId}: ${data.length} Baseline Bitmap Types.` ) return queryLoader.insertBitmapAtomic( db, packageId, bitmaps.map((x) => - prepareEnumOrBitmapAtomic(x, typeMap.get(dbEnum.zclType.bitmap)), - ), + prepareEnumOrBitmapAtomic(x, typeMap.get(dbEnum.zclType.bitmap)) + ) ) } @@ -1417,9 +1417,9 @@ async function processBitmap(db, filePath, packageId, knownPackages, data) { packageId, x, typeMap.get(dbEnum.zclType.bitmap), - typeMap, - ), - ), + typeMap + ) + ) ) } @@ -1438,7 +1438,7 @@ async function processBitmapFields( filePath, packageId, knownPackages, - data, + data ) { env.logDebug(`${filePath}, ${packageId}: ${data.length} Bitmap Fields.`) let bitmapFields = [] @@ -1481,7 +1481,7 @@ async function processBitmapFields( db, packageId, knownPackages, - bitmapFields, + bitmapFields ) } @@ -1518,7 +1518,7 @@ async function processStruct(db, filePath, packageId, knownPackages, data) { return queryLoader.insertStruct( db, knownPackages, - data.map((x) => prepareStruct(x, typeMap.get(dbEnum.zclType.struct))), + data.map((x) => prepareStruct(x, typeMap.get(dbEnum.zclType.struct))) ) } @@ -1587,10 +1587,15 @@ async function processStructItems(db, filePath, packageIds, data, context) { } /** - * Preparation step for the device types. + * Prepares a device type object by extracting and transforming its properties. + * + * This function takes a device type object and processes its properties to create + * a new object with a specific structure. It handles various properties such as + * device ID, profile ID, domain, name, description, class, scope, and superset. + * Additionally, it processes endpoint compositions and clusters if they exist. * - * @param {*} deviceType - * @returns an object containing the prepared device types. + * @param {Object} deviceType - The device type object to be prepared. + * @returns {Object} The prepared device type object with transformed properties. */ function prepareDeviceType(deviceType) { let ret = { @@ -1606,7 +1611,12 @@ function prepareDeviceType(deviceType) { } if ('endpointComposition' in deviceType) { try { + console.log(deviceType.endpointComposition[0].endpoint[0].$.constraint) ret.compositionType = deviceType.endpointComposition[0].compositionType[0] + ret.conformance = + deviceType.endpointComposition[0].endpoint[0].$.conformance + ret.constraint = + deviceType.endpointComposition[0].endpoint[0].$.constraint ret.childDeviceId = deviceType.endpointComposition[0].endpoint[0].deviceType[0] } catch (error) { @@ -1683,7 +1693,7 @@ async function processDeviceTypes(db, filePath, packageId, data, context) { await queryLoader.insertDeviceComposition( db, deviceType, - endpointCompositionId, + endpointCompositionId ) } } @@ -1703,7 +1713,7 @@ async function processParsedZclData( db, argument, previouslyKnownPackages, - context, + context ) { let filePath = argument.filePath let data = argument.result @@ -1735,7 +1745,7 @@ async function processParsedZclData( let batch1 = [] if ('accessControl' in toplevel) { batch1.push( - processAccessControl(db, filePath, packageId, toplevel.accessControl), + processAccessControl(db, filePath, packageId, toplevel.accessControl) ) } if ('tag' in toplevel) { @@ -1755,19 +1765,19 @@ async function processParsedZclData( filePath, packageId, toplevel.deviceType, - context, - ), + context + ) ) } if ('global' in toplevel) { batch2.push( - processGlobals(db, filePath, packageId, toplevel.global, context), + processGlobals(db, filePath, packageId, toplevel.global, context) ) } if ('cluster' in toplevel) { featureClusters = toplevel.cluster.filter((c) => 'features' in c) batch2.push( - processClusters(db, filePath, packageId, toplevel.cluster, context), + processClusters(db, filePath, packageId, toplevel.cluster, context) ) } await Promise.all(batch2) @@ -1781,8 +1791,8 @@ async function processParsedZclData( packageId, knownPackages, toplevel.atomic, - dbEnum.zclType.atomic, - ), + dbEnum.zclType.atomic + ) ) } @@ -1794,8 +1804,8 @@ async function processParsedZclData( packageId, knownPackages, toplevel.bitmap, - dbEnum.zclType.bitmap, - ), + dbEnum.zclType.bitmap + ) ) } @@ -1817,8 +1827,8 @@ async function processParsedZclData( }, }, ], - dbEnum.zclType.bitmap, - ), + dbEnum.zclType.bitmap + ) ) }) } @@ -1831,8 +1841,8 @@ async function processParsedZclData( packageId, knownPackages, toplevel.enum, - dbEnum.zclType.enum, - ), + dbEnum.zclType.enum + ) ) } if (dbEnum.zclType.struct in toplevel) { @@ -1843,8 +1853,8 @@ async function processParsedZclData( packageId, knownPackages, toplevel.struct, - dbEnum.zclType.struct, - ), + dbEnum.zclType.struct + ) ) } await Promise.all(batch3) @@ -1854,10 +1864,10 @@ async function processParsedZclData( let Batch4 = [] if (dbEnum.zclType.atomic in toplevel) { Batch4.push( - processNumber(db, filePath, packageId, knownPackages, toplevel.atomic), + processNumber(db, filePath, packageId, knownPackages, toplevel.atomic) ) Batch4.push( - processString(db, filePath, packageId, knownPackages, toplevel.atomic), + processString(db, filePath, packageId, knownPackages, toplevel.atomic) ) Batch4.push( processEnumAtomic( @@ -1865,8 +1875,8 @@ async function processParsedZclData( filePath, packageId, knownPackages, - toplevel.atomic, - ), + toplevel.atomic + ) ) Batch4.push( processBitmapAtomic( @@ -1874,8 +1884,8 @@ async function processParsedZclData( filePath, packageId, knownPackages, - toplevel.atomic, - ), + toplevel.atomic + ) ) } await Promise.all(Batch4) @@ -1883,12 +1893,12 @@ async function processParsedZclData( let Batch5 = [] if (dbEnum.zclType.enum in toplevel) { Batch5.push( - processEnum(db, filePath, packageId, knownPackages, toplevel.enum), + processEnum(db, filePath, packageId, knownPackages, toplevel.enum) ) } if (dbEnum.zclType.bitmap in toplevel) { Batch5.push( - processBitmap(db, filePath, packageId, knownPackages, toplevel.bitmap), + processBitmap(db, filePath, packageId, knownPackages, toplevel.bitmap) ) } // Treating features in a cluster as a bitmap @@ -1903,13 +1913,13 @@ async function processParsedZclData( cluster_code: [fc.code[0]], }, }, - ]), + ]) ) }) } if (dbEnum.zclType.struct in toplevel) { Batch5.push( - processStruct(db, filePath, packageId, knownPackages, toplevel.struct), + processStruct(db, filePath, packageId, knownPackages, toplevel.struct) ) } await Promise.all(Batch5) @@ -1918,7 +1928,7 @@ async function processParsedZclData( let batch6 = [] if (dbEnum.zclType.enum in toplevel) { batch6.push( - processEnumItems(db, filePath, packageId, knownPackages, toplevel.enum), + processEnumItems(db, filePath, packageId, knownPackages, toplevel.enum) ) } if (dbEnum.zclType.bitmap in toplevel) { @@ -1928,15 +1938,15 @@ async function processParsedZclData( filePath, packageId, knownPackages, - toplevel.bitmap, - ), + toplevel.bitmap + ) ) } // Treating features in a cluster as a bitmap if (featureClusters.length > 0) { featureClusters.forEach((fc) => { batch6.push( - processBitmapFields(db, filePath, packageId, knownPackages, fc), + processBitmapFields(db, filePath, packageId, knownPackages, fc) ) }) } @@ -1947,8 +1957,8 @@ async function processParsedZclData( filePath, knownPackages, toplevel.struct, - context, - ), + context + ) ) } await Promise.all(batch6) @@ -1957,7 +1967,7 @@ async function processParsedZclData( let Batch7 = [] if ('defaultAccess' in toplevel) { Batch7.push( - processDefaultAccess(db, filePath, packageId, toplevel.defaultAccess), + processDefaultAccess(db, filePath, packageId, toplevel.defaultAccess) ) } if ('atomic' in toplevel) { @@ -1977,8 +1987,8 @@ async function processParsedZclData( db, filePath, packageId, - toplevel.cluster, - ), + toplevel.cluster + ) ) } if ('clusterExtension' in toplevel) { @@ -1989,8 +1999,8 @@ async function processParsedZclData( packageId, knownPackages, toplevel.clusterExtension, - context, - ), + context + ) ) } return Promise.all(delayedPromises) @@ -2018,7 +2028,7 @@ async function parseSingleZclFile(db, packageId, file, context) { data, packageId, dbEnum.packageType.zclXml, - false, + false ) if (result.data) { result.result = await util.parseXml(fileContent) @@ -2054,13 +2064,13 @@ async function isCrcMismatchOrPackageDoesNotExist(db, packageId, files) { db, filePath, packageId, - false, + false ) if (pkg != null && pkg.crc != actualCrc) { env.logDebug( `CRC missmatch for file ${pkg.path}, (${pkg.crc} vs ${actualCrc}) package id ${pkg.id}, parsing. - Mismatch with package id: ${packageId}`, + Mismatch with package id: ${packageId}` ) result.isCrcMismatch = true return result @@ -2068,7 +2078,7 @@ async function isCrcMismatchOrPackageDoesNotExist(db, packageId, files) { // This is executed if there is no CRC in the database. packagesNotFound++ env.logDebug( - `No CRC in the database for file ${filePath}. Package needs to be loaded`, + `No CRC in the database for file ${filePath}. Package needs to be loaded` ) } else if (pkg != null && pkg.crc == actualCrc) { packagesFound++ @@ -2101,14 +2111,14 @@ async function parseZclFiles(db, packageId, zclFiles, context) { // referenced by other types let typesFiles = zclFiles.filter((file) => file.includes('types.xml')) let typeFilePromise = typesFiles.map((file) => - parseSingleZclFile(db, packageId, file, context), + parseSingleZclFile(db, packageId, file, context) ) await Promise.all(typeFilePromise) // Load everything apart from atomic data types let nonTypesFiles = zclFiles.filter((file) => !file.includes('types.xml')) let individualFilePromise = nonTypesFiles.map((file) => - parseSingleZclFile(db, packageId, file, context), + parseSingleZclFile(db, packageId, file, context) ) let individualResults = await Promise.all(individualFilePromise) let laterPromises = individualResults.flat(2) @@ -2137,7 +2147,7 @@ async function parseManufacturerData(db, packageId, manufacturersXml) { manufacturerMap.map.mapping.map((datum) => { let mfgPair = datum['$'] return { code: mfgPair['code'], label: mfgPair['translation'] } - }), + }) ) } @@ -2160,7 +2170,7 @@ async function parseProfilesData(db, packageId, profilesXml) { profilesMap.map.mapping.map((datum) => { let profilePair = datum['$'] return { code: profilePair['code'], label: profilePair['translation'] } - }), + }) ) } @@ -2187,9 +2197,9 @@ async function parseFeatureFlags(db, packageId, featureFlags) { code: data, label: featureFlags[featureCategory][data] == '1' ? true : false, } - }), + }) ) - }), + }) ) } @@ -2216,7 +2226,7 @@ async function parseUiOptions(db, packageId, uiOptions) { db, packageId, dbEnum.packageOptionCategory.ui, - data, + data ) } /** @@ -2256,7 +2266,7 @@ async function parseTextOptions(db, pkgRef, textOptions) { optionKey, optionValues.map((optionValue) => { return { code: optionValue.toLowerCase(), label: optionValue } - }), + }) ) }) return Promise.all(promises) @@ -2286,7 +2296,7 @@ async function parseBoolOptions(db, pkgRef, booleanCategories) { queryPackage.insertOptionsKeyValues(db, pkgRef, optionCategory, [ { code: 1, label: 'True' }, { code: 0, label: 'False' }, - ]), + ]) ) }) return Promise.all(promises) @@ -2311,7 +2321,7 @@ async function parseBoolOptions(db, pkgRef, booleanCategories) { async function parseattributeAccessInterfaceAttributes( db, pkgRef, - attributeAccessInterfaceAttributes, + attributeAccessInterfaceAttributes ) { const clusters = Object.keys(attributeAccessInterfaceAttributes) for (let i = 0; i < clusters.length; i++) { @@ -2328,7 +2338,7 @@ async function parseattributeAccessInterfaceAttributes( db, pkgRef, cluster, - optionsKeyValues, + optionsKeyValues ) } catch (error) { console.error(`Error inserting attributes for cluster ${cluster}:`, error) @@ -2368,7 +2378,7 @@ async function parseTextDefaults(db, pkgRef, textDefaults) { db, pkgRef, optionCategory, - hex, + hex ) } else { return specificValue @@ -2378,17 +2388,17 @@ async function parseTextDefaults(db, pkgRef, textDefaults) { if (specificValue == null) { env.logWarning( 'Default value for: ${optionCategory}/${txt} does not match an option for packageId: ' + - pkgRef, + pkgRef ) } else { return queryPackage.insertDefaultOptionValue( db, pkgRef, optionCategory, - specificValue.id, + specificValue.id ) } - }), + }) ) } return Promise.all(promises) @@ -2405,16 +2415,16 @@ async function parseBoolDefaults(db, pkgRef, booleanCategories) { db, pkgRef, optionCategory, - booleanCategories[optionCategory] ? 1 : 0, + booleanCategories[optionCategory] ? 1 : 0 ) .then((specificValue) => queryPackage.insertDefaultOptionValue( db, pkgRef, optionCategory, - specificValue.id, - ), - ), + specificValue.id + ) + ) ) } return Promise.all(promises) @@ -2444,7 +2454,7 @@ async function loadIndividualSilabsFile(db, filePath, sessionId) { data, null, dbEnum.packageType.zclXmlStandalone, - true, + true ) let pkgId = result.packageId if (result.data) { @@ -2468,14 +2478,14 @@ async function loadIndividualSilabsFile(db, filePath, sessionId) { !result.result.configurator.clusterExtension ) { env.logDebug( - `CRC match for file ${result.filePath} (${result.crc}), skipping parsing.`, + `CRC match for file ${result.filePath} (${result.crc}), skipping parsing.` ) delete result.result } } let sessionPackages = await queryPackage.getSessionZclPackages( db, - sessionId, + sessionId ) let packageSet = new Set() sessionPackages.map((sessionPackage) => { @@ -2486,14 +2496,14 @@ async function loadIndividualSilabsFile(db, filePath, sessionId) { await Promise.all( laterPromises.flat(1).map((promise) => { if (promise != null && promise != undefined) return promise() - }), + }) ) // Check if session partition for package exists. If not then add it. let sessionPartitionInfoForNewPackage = await querySession.selectSessionPartitionInfoFromPackageId( db, sessionId, - pkgId, + pkgId ) if (sessionPartitionInfoForNewPackage.length == 0) { let sessionPartitionInfo = @@ -2501,13 +2511,13 @@ async function loadIndividualSilabsFile(db, filePath, sessionId) { let sessionPartitionId = await querySession.insertSessionPartition( db, sessionId, - sessionPartitionInfo.length + 1, + sessionPartitionInfo.length + 1 ) await queryPackage.insertSessionPackage( db, sessionPartitionId, pkgId, - true, + true ) } await zclLoader.processZclPostLoading(db, pkgId) @@ -2520,7 +2530,7 @@ async function loadIndividualSilabsFile(db, filePath, sessionId) { `Error reading xml file: ${filePath}, Error Message: ` + err.message, sessionId, 1, - 0, + 0 ) return { succeeded: false, err: err } } @@ -2547,7 +2557,7 @@ async function processCustomZclDeviceType(db, packageId) { db, packageId, dbEnum.customDevice.code, - dbEnum.customDevice.name, + dbEnum.customDevice.name ) if (existingCustomDevice == null) await queryLoader.insertDeviceTypes(db, packageId, customDeviceTypes) @@ -2596,12 +2606,12 @@ async function loadZclJsonOrProperties(db, metafile, isJson = false) { db, ctx.metadataFile, ctx.crc, - true, + true ) let packageStatus = await isCrcMismatchOrPackageDoesNotExist( db, ctx.packageId, - ctx.zclFiles, + ctx.zclFiles ) if (packageStatus.isCrcMismatch || packageStatus.areSomePackagesNotLoaded) { await queryPackage.updatePackageIsInSync(db, ctx.packageId, 0) @@ -2609,7 +2619,7 @@ async function loadZclJsonOrProperties(db, metafile, isJson = false) { db, ctx.metadataFile, ctx.crc, - false, + false ) } @@ -2623,7 +2633,7 @@ async function loadZclJsonOrProperties(db, metafile, isJson = false) { ctx.packageId, ctx.version, ctx.category, - ctx.description, + ctx.description ) } @@ -2632,7 +2642,7 @@ async function loadZclJsonOrProperties(db, metafile, isJson = false) { let newFileResult = await newDataModel.parseNewXmlFiles( db, ctx.packageId, - ctx.newXmlFile, + ctx.newXmlFile ) ctx.clustersLoadedFromNewFiles = newFileResult.clusterIdsLoaded ctx.newFileErrors = newFileResult.errorFiles @@ -2642,31 +2652,31 @@ async function loadZclJsonOrProperties(db, metafile, isJson = false) { if (ctx.attributeAccessInterfaceAttributes) { let all_known_clusters = await queryZcl.selectAllClusters( db, - ctx.packageId, + ctx.packageId ) for (let clusterName of Object.keys( - ctx.attributeAccessInterfaceAttributes, + ctx.attributeAccessInterfaceAttributes )) { let known_cluster = all_known_clusters.find( - (c) => c.name == clusterName, + (c) => c.name == clusterName ) if (!known_cluster) { throw new Error( - `\n\nUnknown cluster "${clusterName}" in attributeAccessInterfaceAttributes\n\n`, + `\n\nUnknown cluster "${clusterName}" in attributeAccessInterfaceAttributes\n\n` ) } let known_cluster_attributes = await queryZcl.selectAttributesByClusterIdIncludingGlobal( db, known_cluster.id, - ctx.packageId, + ctx.packageId ) for (let attrName of ctx.attributeAccessInterfaceAttributes[ clusterName ]) { if (!known_cluster_attributes.find((a) => a.name == attrName)) { throw new Error( - `\n\nUnknown attribute "${attrName}" in attributeAccessInterfaceAttributes["${clusterName}"]\n\n`, + `\n\nUnknown attribute "${attrName}" in attributeAccessInterfaceAttributes["${clusterName}"]\n\n` ) } } @@ -2692,7 +2702,7 @@ async function loadZclJsonOrProperties(db, metafile, isJson = false) { await parseattributeAccessInterfaceAttributes( db, ctx.packageId, - ctx.attributeAccessInterfaceAttributes, + ctx.attributeAccessInterfaceAttributes ) } if (ctx.featureFlags) { diff --git a/zcl-builtin/matter/data-model/chip/matter-devices.xml b/zcl-builtin/matter/data-model/chip/matter-devices.xml index f04ce55c50..bb8fb7b5ae 100644 --- a/zcl-builtin/matter/data-model/chip/matter-devices.xml +++ b/zcl-builtin/matter/data-model/chip/matter-devices.xml @@ -2052,7 +2052,7 @@ limitations under the License. Endpoint tree - + 0x0071 From 3df6c1b2ab2f1e61e0b37841db8826f274602d25 Mon Sep 17 00:00:00 2001 From: Paul Regan Date: Wed, 21 Aug 2024 10:53:59 -0400 Subject: [PATCH 3/6] cleanup --- src-electron/zcl/zcl-loader-silabs.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src-electron/zcl/zcl-loader-silabs.js b/src-electron/zcl/zcl-loader-silabs.js index 49626fc2b9..de8c93a2bd 100644 --- a/src-electron/zcl/zcl-loader-silabs.js +++ b/src-electron/zcl/zcl-loader-silabs.js @@ -1611,7 +1611,6 @@ function prepareDeviceType(deviceType) { } if ('endpointComposition' in deviceType) { try { - console.log(deviceType.endpointComposition[0].endpoint[0].$.constraint) ret.compositionType = deviceType.endpointComposition[0].compositionType[0] ret.conformance = deviceType.endpointComposition[0].endpoint[0].$.conformance From c970566873a5effa35ce54d84f84729b620f0ade Mon Sep 17 00:00:00 2001 From: Paul Regan Date: Wed, 21 Aug 2024 11:00:53 -0400 Subject: [PATCH 4/6] cleanup --- src-electron/db/query-loader.js | 49 +++++++++++++++++++++------------ 1 file changed, 31 insertions(+), 18 deletions(-) diff --git a/src-electron/db/query-loader.js b/src-electron/db/query-loader.js index 5652ec2334..001419df18 100644 --- a/src-electron/db/query-loader.js +++ b/src-electron/db/query-loader.js @@ -938,34 +938,47 @@ async function insertAtomics(db, packageId, data) { * @param {*} context - The context containing the mandatory device type to check against. * @returns A promise resolved with the result of the database insert operation. */ -function insertEndpointComposition(db, composition, context) { - if (parseInt(context.mandatoryDeviceTypes, 16) === composition.code) { - return dbApi.dbInsert( - db, - 'INSERT INTO ENDPOINT_COMPOSITION (TYPE, CODE) VALUES (?, ?)', - [dbEnum.composition.mandatoryEndpoint, composition.code] - ) - } else { - return dbApi.dbInsert( - db, - 'INSERT INTO ENDPOINT_COMPOSITION (TYPE, CODE) VALUES (?, ?)', - [composition.compositionType, composition.code] - ) +async function insertEndpointComposition(db, composition, context) { + try { + if (parseInt(context.mandatoryDeviceTypes, 16) === composition.code) { + return await dbApi.dbInsert( + db, + 'INSERT INTO ENDPOINT_COMPOSITION (TYPE, CODE) VALUES (?, ?)', + [dbEnum.composition.mandatoryEndpoint, composition.code] + ) + } else { + return await dbApi.dbInsert( + db, + 'INSERT INTO ENDPOINT_COMPOSITION (TYPE, CODE) VALUES (?, ?)', + [composition.compositionType, composition.code] + ) + } + } catch (error) { + console.error('Error inserting endpoint composition:', error) + throw error // Re-throw the error after logging it } } /** - * Asynchronously retrieves the ID of an endpoint composition based on its code. + * Retrieves the endpoint composition ID by device code. + * + * This function executes a SQL query to fetch the endpoint composition ID + * associated with a given device code. If the query fails, an error is logged. * * @param {Object} db - The database connection object. - * @param {Object} deviceType - An object representing the device type, which contains the 'code' property. - * @returns {Promise} A promise that resolves with the ID of the endpoint composition if found, or null otherwise. + * @param {Object} deviceType - The device type object containing the device code. + * @returns {Promise} The endpoint composition ID or null if not found. */ async function getEndpointCompositionIdByCode(db, deviceType) { const query = 'SELECT ENDPOINT_COMPOSITION_ID FROM ENDPOINT_COMPOSITION WHERE CODE = ?' - const result = await dbApi.dbGet(db, query, [deviceType.code]) - return result ? result.ENDPOINT_COMPOSITION_ID : null + try { + const result = await dbApi.dbGet(db, query, [deviceType.code]) + return result ? result.ENDPOINT_COMPOSITION_ID : null + } catch (error) { + console.error('Error retrieving endpoint composition ID:', error) + return null + } } /** From 6045cc5cc14cd058331655b206feb40041f8a493 Mon Sep 17 00:00:00 2001 From: Paul Regan Date: Wed, 21 Aug 2024 11:04:15 -0400 Subject: [PATCH 5/6] update schema diagram --- docs/zap-schema.svg | 4902 +++++++++++++++++++++---------------------- 1 file changed, 2451 insertions(+), 2451 deletions(-) diff --git a/docs/zap-schema.svg b/docs/zap-schema.svg index 138da6b0e8..938db83b94 100644 --- a/docs/zap-schema.svg +++ b/docs/zap-schema.svg @@ -4,3095 +4,3095 @@ - - + + SchemaCrawler_Diagram - -generated by -SchemaCrawler 16.20.4 -generated on -2024-07-30 18:49:39 - + +generated by +SchemaCrawler 16.20.4 +generated on +2024-08-21 15:03:01 + access_72bb1dc3 - -ACCESS - -[table] -ACCESS_ID - -INTEGER - -auto-incremented -OPERATION_REF - -INTEGER -ROLE_REF - -INTEGER -ACCESS_MODIFIER_REF - -INTEGER - + +ACCESS + +[table] +ACCESS_ID + +INTEGER + +auto-incremented +OPERATION_REF + +INTEGER +ROLE_REF + +INTEGER +ACCESS_MODIFIER_REF + +INTEGER + access_modifier_f63f3fb1 - -ACCESS_MODIFIER - -[table] -ACCESS_MODIFIER_ID - -INTEGER - -auto-incremented -PACKAGE_REF - -INTEGER -NAME - -TEXT -DESCRIPTION - -TEXT - + +ACCESS_MODIFIER + +[table] +ACCESS_MODIFIER_ID + +INTEGER + +auto-incremented +PACKAGE_REF + +INTEGER +NAME + +TEXT +DESCRIPTION + +TEXT + access_72bb1dc3:w->access_modifier_f63f3fb1:e - - - - - - - -SCHCRWLR_F63ECB52_72BAA964 + + + + + + + +SCHCRWLR_F63ECB52_72BAA964 operation_93359a6 - -OPERATION - -[table] -OPERATION_ID - -INTEGER - -auto-incremented -PACKAGE_REF - -INTEGER -NAME - -TEXT -DESCRIPTION - -TEXT - + +OPERATION + +[table] +OPERATION_ID + +INTEGER + +auto-incremented +PACKAGE_REF + +INTEGER +NAME + +TEXT +DESCRIPTION + +TEXT + - + access_72bb1dc3:w->operation_93359a6:e - - - - - - - -SCHCRWLR_0932E547_72BAA964 + + + + + + + +SCHCRWLR_0932E547_72BAA964 role_26ecd5 - -ROLE - -[table] -ROLE_ID - -INTEGER - -auto-incremented -PACKAGE_REF - -INTEGER -LEVEL - -INTEGER -NAME - -TEXT -DESCRIPTION - -TEXT - + +ROLE + +[table] +ROLE_ID + +INTEGER + +auto-incremented +PACKAGE_REF + +INTEGER +LEVEL + +INTEGER +NAME + +TEXT +DESCRIPTION + +TEXT + access_72bb1dc3:w->role_26ecd5:e - - - - - - - -SCHCRWLR_00267876_72BAA964 + + + + + + + +SCHCRWLR_00267876_72BAA964 attribute_access_b017dce6 - -ATTRIBUTE_ACCESS - -[table] -ATTRIBUTE_REF - -INTEGER -ACCESS_REF - -INTEGER - + +ATTRIBUTE_ACCESS + +[table] +ATTRIBUTE_REF + +INTEGER +ACCESS_REF + +INTEGER + attribute_access_b017dce6:w->access_72bb1dc3:e - - - - - - - -SCHCRWLR_72BAA964_B0176887 + + + + + + + +SCHCRWLR_72BAA964_B0176887 attribute_a6e02edb - -ATTRIBUTE - -[table] -ATTRIBUTE_ID - -INTEGER - -auto-incremented -CLUSTER_REF - -INTEGER -PACKAGE_REF - -INTEGER -CODE - -INTEGER -MANUFACTURER_CODE - -INTEGER -NAME - -TEXT -TYPE - -TEXT -SIDE - -TEXT -DEFINE - -TEXT -MIN - -TEXT -MAX - -TEXT -MIN_LENGTH - -INTEGER -MAX_LENGTH - -INTEGER -REPORT_MIN_INTERVAL - -INTEGER -REPORT_MAX_INTERVAL - -INTEGER -REPORTABLE_CHANGE - -TEXT -REPORTABLE_CHANGE_LENGTH - -INTEGER -IS_WRITABLE - -INTEGER -DEFAULT_VALUE - -TEXT -IS_SCENE_REQUIRED - -INTEGER -IS_OPTIONAL - -INTEGER -REPORTING_POLICY - -TEXT -STORAGE_POLICY - -TEXT -IS_NULLABLE - -INTEGER -ARRAY_TYPE - -TEXT -MUST_USE_TIMED_WRITE - -INTEGER -INTRODUCED_IN_REF - -INTEGER -REMOVED_IN_REF - -INTEGER -API_MATURITY - -TEXT -IS_CHANGE_COMITTED - -INTEGER -PERSISTENCE - -TEXT - + +ATTRIBUTE + +[table] +ATTRIBUTE_ID + +INTEGER + +auto-incremented +CLUSTER_REF + +INTEGER +PACKAGE_REF + +INTEGER +CODE + +INTEGER +MANUFACTURER_CODE + +INTEGER +NAME + +TEXT +TYPE + +TEXT +SIDE + +TEXT +DEFINE + +TEXT +MIN + +TEXT +MAX + +TEXT +MIN_LENGTH + +INTEGER +MAX_LENGTH + +INTEGER +REPORT_MIN_INTERVAL + +INTEGER +REPORT_MAX_INTERVAL + +INTEGER +REPORTABLE_CHANGE + +TEXT +REPORTABLE_CHANGE_LENGTH + +INTEGER +IS_WRITABLE + +INTEGER +DEFAULT_VALUE + +TEXT +IS_SCENE_REQUIRED + +INTEGER +IS_OPTIONAL + +INTEGER +REPORTING_POLICY + +TEXT +STORAGE_POLICY + +TEXT +IS_NULLABLE + +INTEGER +ARRAY_TYPE + +TEXT +MUST_USE_TIMED_WRITE + +INTEGER +INTRODUCED_IN_REF + +INTEGER +REMOVED_IN_REF + +INTEGER +API_MATURITY + +TEXT +IS_CHANGE_COMITTED + +INTEGER +PERSISTENCE + +TEXT + attribute_access_b017dce6:w->attribute_a6e02edb:e - - - - - - - -SCHCRWLR_A6DFBA7C_B0176887 + + + + + + + +SCHCRWLR_A6DFBA7C_B0176887 cluster_access_38ea13c8 - -CLUSTER_ACCESS - -[table] -CLUSTER_REF - -INTEGER -ACCESS_REF - -INTEGER - + +CLUSTER_ACCESS + +[table] +CLUSTER_REF + +INTEGER +ACCESS_REF + +INTEGER + cluster_access_38ea13c8:w->access_72bb1dc3:e - - - - - - - -SCHCRWLR_72BAA964_38E99F69 + + + + + + + +SCHCRWLR_72BAA964_38E99F69 cluster_5ec71239 - -CLUSTER - -[table] -CLUSTER_ID - -INTEGER - -auto-incremented -PACKAGE_REF - -INTEGER -DOMAIN_NAME - -TEXT -CODE - -INTEGER -MANUFACTURER_CODE - -INTEGER -NAME - -TEXT -DESCRIPTION - -TEXT -DEFINE - -TEXT -IS_SINGLETON - -INTEGER -REVISION - -INTEGER -INTRODUCED_IN_REF - -INTEGER -REMOVED_IN_REF - -INTEGER -API_MATURITY - -TEXT - + +CLUSTER + +[table] +CLUSTER_ID + +INTEGER + +auto-incremented +PACKAGE_REF + +INTEGER +DOMAIN_NAME + +TEXT +CODE + +INTEGER +MANUFACTURER_CODE + +INTEGER +NAME + +TEXT +DESCRIPTION + +TEXT +DEFINE + +TEXT +IS_SINGLETON + +INTEGER +REVISION + +INTEGER +INTRODUCED_IN_REF + +INTEGER +REMOVED_IN_REF + +INTEGER +API_MATURITY + +TEXT + cluster_access_38ea13c8:w->cluster_5ec71239:e - - - - - - - -SCHCRWLR_5EC69DDA_38E99F69 + + + + + + + +SCHCRWLR_5EC69DDA_38E99F69 command_access_b02dd957 - -COMMAND_ACCESS - -[table] -COMMAND_REF - -INTEGER -ACCESS_REF - -INTEGER - + +COMMAND_ACCESS + +[table] +COMMAND_REF + +INTEGER +ACCESS_REF + +INTEGER + command_access_b02dd957:w->access_72bb1dc3:e - - - - - - - -SCHCRWLR_72BAA964_B02D64F8 + + + + + + + +SCHCRWLR_72BAA964_B02D64F8 command_6371df8a - -COMMAND - -[table] -COMMAND_ID - -INTEGER - -auto-incremented -CLUSTER_REF - -INTEGER -PACKAGE_REF - -INTEGER -CODE - -INTEGER -MANUFACTURER_CODE - -INTEGER -NAME - -TEXT -DESCRIPTION - -TEXT -SOURCE - -TEXT -IS_OPTIONAL - -INTEGER -MUST_USE_TIMED_INVOKE - -INTEGER -IS_FABRIC_SCOPED - -INTEGER -INTRODUCED_IN_REF - -INTEGER -REMOVED_IN_REF - -INTEGER -RESPONSE_NAME - -INTEGER -RESPONSE_REF - -INTEGER -IS_DEFAULT_RESPONSE_ENABLED - -INTEGER - + +COMMAND + +[table] +COMMAND_ID + +INTEGER + +auto-incremented +CLUSTER_REF + +INTEGER +PACKAGE_REF + +INTEGER +CODE + +INTEGER +MANUFACTURER_CODE + +INTEGER +NAME + +TEXT +DESCRIPTION + +TEXT +SOURCE + +TEXT +IS_OPTIONAL + +INTEGER +MUST_USE_TIMED_INVOKE + +INTEGER +IS_FABRIC_SCOPED + +INTEGER +INTRODUCED_IN_REF + +INTEGER +REMOVED_IN_REF + +INTEGER +RESPONSE_NAME + +INTEGER +RESPONSE_REF + +INTEGER +IS_DEFAULT_RESPONSE_ENABLED + +INTEGER + command_access_b02dd957:w->command_6371df8a:e - - - - - - - -SCHCRWLR_63716B2B_B02D64F8 + + + + + + + +SCHCRWLR_63716B2B_B02D64F8 default_access_7ba041a1 - -DEFAULT_ACCESS - -[table] -PACKAGE_REF - -INTEGER -ENTITY_TYPE - -TEXT -ACCESS_REF - -INTEGER - + +DEFAULT_ACCESS + +[table] +PACKAGE_REF + +INTEGER +ENTITY_TYPE + +TEXT +ACCESS_REF + +INTEGER + default_access_7ba041a1:w->access_72bb1dc3:e - - - - - - - -SCHCRWLR_72BAA964_7B9FCD42 + + + + + + + +SCHCRWLR_72BAA964_7B9FCD42 package_fab13485 - -PACKAGE - -[table] -PACKAGE_ID - -INTEGER - -auto-incremented -PARENT_PACKAGE_REF - -INTEGER -PATH - -TEXT NOT NULL -TYPE - -TEXT -CRC - -INTEGER -VERSION - -INTEGER -CATEGORY - -TEXT -DESCRIPTION - -TEXT -IS_IN_SYNC - -BOOLEAN - + +PACKAGE + +[table] +PACKAGE_ID + +INTEGER + +auto-incremented +PARENT_PACKAGE_REF + +INTEGER +PATH + +TEXT NOT NULL +TYPE + +TEXT +CRC + +INTEGER +VERSION + +INTEGER +CATEGORY + +TEXT +DESCRIPTION + +TEXT +IS_IN_SYNC + +BOOLEAN + - + default_access_7ba041a1:w->package_fab13485:e - - - - - - - -SCHCRWLR_FAB0C026_7B9FCD42 + + + + + + + +SCHCRWLR_FAB0C026_7B9FCD42 event_access_4668c328 - -EVENT_ACCESS - -[table] -EVENT_REF - -INTEGER -ACCESS_REF - -INTEGER - + +EVENT_ACCESS + +[table] +EVENT_REF + +INTEGER +ACCESS_REF + +INTEGER + event_access_4668c328:w->access_72bb1dc3:e - - - - - - - -SCHCRWLR_72BAA964_46684EC9 + + + + + + + +SCHCRWLR_72BAA964_46684EC9 event_3f4eed9 - -EVENT - -[table] -EVENT_ID - -INTEGER - -auto-incremented -CLUSTER_REF - -INTEGER -PACKAGE_REF - -INTEGER -CODE - -INTEGER -MANUFACTURER_CODE - -INTEGER -NAME - -TEXT -DESCRIPTION - -TEXT -SIDE - -TEXT -IS_OPTIONAL - -INTEGER -IS_FABRIC_SENSITIVE - -INTEGER -PRIORITY - -TEXT -INTRODUCED_IN_REF - -INTEGER -REMOVED_IN_REF - -INTEGER - + +EVENT + +[table] +EVENT_ID + +INTEGER + +auto-incremented +CLUSTER_REF + +INTEGER +PACKAGE_REF + +INTEGER +CODE + +INTEGER +MANUFACTURER_CODE + +INTEGER +NAME + +TEXT +DESCRIPTION + +TEXT +SIDE + +TEXT +IS_OPTIONAL + +INTEGER +IS_FABRIC_SENSITIVE + +INTEGER +PRIORITY + +TEXT +INTRODUCED_IN_REF + +INTEGER +REMOVED_IN_REF + +INTEGER + - + event_access_4668c328:w->event_3f4eed9:e - - - - - - - -SCHCRWLR_03F47A7A_46684EC9 + + + + + + + +SCHCRWLR_03F47A7A_46684EC9 - + access_modifier_f63f3fb1:w->package_fab13485:e - - - - - - - -SCHCRWLR_FAB0C026_F63ECB52 + + + + + + + +SCHCRWLR_FAB0C026_F63ECB52 atomic_73b03e8a - -"ATOMIC" - -[table] -ATOMIC_ID - -INTEGER - -auto-incremented -PACKAGE_REF - -INTEGER -NAME - -TEXT -DESCRIPTION - -TEXT -ATOMIC_IDENTIFIER - -INTEGER -ATOMIC_SIZE - -INTEGER -IS_DISCRETE - -INTEGER -IS_STRING - -INTEGER -IS_LONG - -INTEGER -IS_CHAR - -INTEGER -IS_SIGNED - -INTEGER - + +"ATOMIC" + +[table] +ATOMIC_ID + +INTEGER + +auto-incremented +PACKAGE_REF + +INTEGER +NAME + +TEXT +DESCRIPTION + +TEXT +ATOMIC_IDENTIFIER + +INTEGER +ATOMIC_SIZE + +INTEGER +IS_DISCRETE + +INTEGER +IS_STRING + +INTEGER +IS_LONG + +INTEGER +IS_CHAR + +INTEGER +IS_SIGNED + +INTEGER + - + atomic_73b03e8a:w->package_fab13485:e - - - - - - - -SCHCRWLR_FAB0C026_CE3170F5 + + + + + + + +SCHCRWLR_FAB0C026_CE3170F5 attribute_a6e02edb:w->cluster_5ec71239:e - - - - - - - -SCHCRWLR_5EC69DDA_A6DFBA7C + + + + + + + +SCHCRWLR_5EC69DDA_A6DFBA7C - + attribute_a6e02edb:w->package_fab13485:e - - - - - - - -SCHCRWLR_FAB0C026_A6DFBA7C + + + + + + + +SCHCRWLR_FAB0C026_A6DFBA7C spec_27641a - -SPEC - -[table] -SPEC_ID - -INTEGER - -auto-incremented -PACKAGE_REF - -INTEGER -CODE - -TEXT NOT NULL -DESCRIPTION - -TEXT -CERTIFIABLE - -INTEGER - + +SPEC + +[table] +SPEC_ID + +INTEGER + +auto-incremented +PACKAGE_REF + +INTEGER +CODE + +TEXT NOT NULL +DESCRIPTION + +TEXT +CERTIFIABLE + +INTEGER + attribute_a6e02edb:w->spec_27641a:e - - - - - - - -SCHCRWLR_0026EFBB_A6DFBA7C + + + + + + + +SCHCRWLR_0026EFBB_A6DFBA7C attribute_a6e02edb:w->spec_27641a:e - - - - - - - -SCHCRWLR_0026EFBB_A6DFBA7C + + + + + + + +SCHCRWLR_0026EFBB_A6DFBA7C device_type_attribute_ce5151f - -DEVICE_TYPE_ATTRIBUTE - -[table] -DEVICE_TYPE_CLUSTER_REF - -INTEGER -ATTRIBUTE_REF - -INTEGER -ATTRIBUTE_NAME - -TEXT - + +DEVICE_TYPE_ATTRIBUTE + +[table] +DEVICE_TYPE_CLUSTER_REF + +INTEGER +ATTRIBUTE_REF + +INTEGER +ATTRIBUTE_NAME + +TEXT + device_type_attribute_ce5151f:w->attribute_a6e02edb:e - - - - - - - -SCHCRWLR_A6DFBA7C_0CE4A0C0 + + + + + + + +SCHCRWLR_A6DFBA7C_0CE4A0C0 device_type_cluster_7298b97d - -DEVICE_TYPE_CLUSTER - -[table] -DEVICE_TYPE_CLUSTER_ID - -INTEGER - -auto-incremented -DEVICE_TYPE_REF - -INTEGER -CLUSTER_REF - -INTEGER -CLUSTER_NAME - -TEXT -INCLUDE_CLIENT - -INTEGER -INCLUDE_SERVER - -INTEGER -LOCK_CLIENT - -INTEGER -LOCK_SERVER - -INTEGER - + +DEVICE_TYPE_CLUSTER + +[table] +DEVICE_TYPE_CLUSTER_ID + +INTEGER + +auto-incremented +DEVICE_TYPE_REF + +INTEGER +CLUSTER_REF + +INTEGER +CLUSTER_NAME + +TEXT +INCLUDE_CLIENT + +INTEGER +INCLUDE_SERVER + +INTEGER +LOCK_CLIENT + +INTEGER +LOCK_SERVER + +INTEGER + - + device_type_attribute_ce5151f:w->device_type_cluster_7298b97d:e - - - - - - - -SCHCRWLR_7298451E_0CE4A0C0 + + + + + + + +SCHCRWLR_7298451E_0CE4A0C0 endpoint_type_attribute_c265400 - -ENDPOINT_TYPE_ATTRIBUTE - -[table] -ENDPOINT_TYPE_ATTRIBUTE_ID - -INTEGER - -auto-incremented -ENDPOINT_TYPE_CLUSTER_REF - -INTEGER -ATTRIBUTE_REF - -INTEGER -INCLUDED - -INTEGER -STORAGE_OPTION - -TEXT -SINGLETON - -INTEGER -BOUNDED - -INTEGER -DEFAULT_VALUE - -TEXT -INCLUDED_REPORTABLE - -INTEGER -MIN_INTERVAL - -INTEGER -MAX_INTERVAL - -INTEGER -REPORTABLE_CHANGE - -INTEGER - + +ENDPOINT_TYPE_ATTRIBUTE + +[table] +ENDPOINT_TYPE_ATTRIBUTE_ID + +INTEGER + +auto-incremented +ENDPOINT_TYPE_CLUSTER_REF + +INTEGER +ATTRIBUTE_REF + +INTEGER +INCLUDED + +INTEGER +STORAGE_OPTION + +TEXT +SINGLETON + +INTEGER +BOUNDED + +INTEGER +DEFAULT_VALUE + +TEXT +INCLUDED_REPORTABLE + +INTEGER +MIN_INTERVAL + +INTEGER +MAX_INTERVAL + +INTEGER +REPORTABLE_CHANGE + +INTEGER + endpoint_type_attribute_c265400:w->attribute_a6e02edb:e - - - - - - - -SCHCRWLR_A6DFBA7C_0C25DFA1 + + + + + + + +SCHCRWLR_A6DFBA7C_0C25DFA1 endpoint_type_cluster_c12e3c9e - -ENDPOINT_TYPE_CLUSTER - -[table] -ENDPOINT_TYPE_CLUSTER_ID - -INTEGER - -auto-incremented -ENDPOINT_TYPE_REF - -INTEGER -CLUSTER_REF - -INTEGER -SIDE - -TEXT -ENABLED - -INTEGER - + +ENDPOINT_TYPE_CLUSTER + +[table] +ENDPOINT_TYPE_CLUSTER_ID + +INTEGER + +auto-incremented +ENDPOINT_TYPE_REF + +INTEGER +CLUSTER_REF + +INTEGER +SIDE + +TEXT +ENABLED + +INTEGER + - + endpoint_type_attribute_c265400:w->endpoint_type_cluster_c12e3c9e:e - - - - - - - -SCHCRWLR_C12DC83F_0C25DFA1 + + + + + + + +SCHCRWLR_C12DC83F_0C25DFA1 global_attribute_default_73c65a21 - -GLOBAL_ATTRIBUTE_DEFAULT - -[table] -GLOBAL_ATTRIBUTE_DEFAULT_ID - -INTEGER - -auto-incremented -CLUSTER_REF - -INTEGER NOT NULL -ATTRIBUTE_REF - -INTEGER NOT NULL -DEFAULT_VALUE - -TEXT - + +GLOBAL_ATTRIBUTE_DEFAULT + +[table] +GLOBAL_ATTRIBUTE_DEFAULT_ID + +INTEGER + +auto-incremented +CLUSTER_REF + +INTEGER NOT NULL +ATTRIBUTE_REF + +INTEGER NOT NULL +DEFAULT_VALUE + +TEXT + global_attribute_default_73c65a21:w->attribute_a6e02edb:e - - - - - - - -SCHCRWLR_A6DFBA7C_73C5E5C2 + + + + + + + +SCHCRWLR_A6DFBA7C_73C5E5C2 global_attribute_default_73c65a21:w->cluster_5ec71239:e - - - - - - - -SCHCRWLR_5EC69DDA_73C5E5C2 + + + + + + + +SCHCRWLR_5EC69DDA_73C5E5C2 attribute_mapping_caf33e4a - -ATTRIBUTE_MAPPING - -[table] -ATTRIBUTE_MAPPING_ID - -INTEGER - -auto-incremented -ATTRIBUTE_LEFT_REF - -INTEGER -ATTRIBUTE_RIGHT_REF - -INTEGER - + +ATTRIBUTE_MAPPING + +[table] +ATTRIBUTE_MAPPING_ID + +INTEGER + +auto-incremented +ATTRIBUTE_LEFT_REF + +INTEGER +ATTRIBUTE_RIGHT_REF + +INTEGER + attribute_mapping_caf33e4a:w->attribute_a6e02edb:e - - - - - - - - -SCHCRWLR_A6DFBA7C_CAF2C9EB + + + + + + + + +SCHCRWLR_A6DFBA7C_CAF2C9EB attribute_mapping_caf33e4a:w->attribute_a6e02edb:e - - - - - - - - -SCHCRWLR_A6DFBA7C_CAF2C9EB + + + + + + + + +SCHCRWLR_A6DFBA7C_CAF2C9EB bitmap_74cc598e - -BITMAP - -[table] -BITMAP_ID - -INTEGER NOT NULL -SIZE - -INTEGER - + +BITMAP + +[table] +BITMAP_ID + +INTEGER NOT NULL +SIZE + +INTEGER + data_type_9233070e - -DATA_TYPE - -[table] -DATA_TYPE_ID - -INTEGER NOT NULL - -auto-incremented -NAME - -TEXT -DESCRIPTION - -TEXT -DISCRIMINATOR_REF - -INTEGER -PACKAGE_REF - -INTEGER - + +DATA_TYPE + +[table] +DATA_TYPE_ID + +INTEGER NOT NULL + +auto-incremented +NAME + +TEXT +DESCRIPTION + +TEXT +DISCRIMINATOR_REF + +INTEGER +PACKAGE_REF + +INTEGER + bitmap_74cc598e:w->data_type_9233070e:e - - - - - - - -SCHCRWLR_923292AF_74CBE52F + + + + + + + +SCHCRWLR_923292AF_74CBE52F bitmap_field_bfea8629 - -BITMAP_FIELD - -[table] -BITMAP_FIELD_ID - -INTEGER NOT NULL - -auto-incremented -BITMAP_REF - -INTEGER -FIELD_IDENTIFIER - -INTEGER -NAME - -TEXT(100) -MASK - -INTEGER -TYPE - -TEXT(100) - + +BITMAP_FIELD + +[table] +BITMAP_FIELD_ID + +INTEGER NOT NULL + +auto-incremented +BITMAP_REF + +INTEGER +FIELD_IDENTIFIER + +INTEGER +NAME + +TEXT(100) +MASK + +INTEGER +TYPE + +TEXT(100) + bitmap_field_bfea8629:w->bitmap_74cc598e:e - - - - - - - -SCHCRWLR_74CBE52F_BFEA11CA + + + + + + + +SCHCRWLR_74CBE52F_BFEA11CA - + cluster_5ec71239:w->package_fab13485:e - - - - - - - -SCHCRWLR_FAB0C026_5EC69DDA + + + + + + + +SCHCRWLR_FAB0C026_5EC69DDA cluster_5ec71239:w->spec_27641a:e - - - - - - - -SCHCRWLR_0026EFBB_5EC69DDA + + + + + + + +SCHCRWLR_0026EFBB_5EC69DDA cluster_5ec71239:w->spec_27641a:e - - - - - - - -SCHCRWLR_0026EFBB_5EC69DDA + + + + + + + +SCHCRWLR_0026EFBB_5EC69DDA command_6371df8a:w->cluster_5ec71239:e - - - - - - - -SCHCRWLR_5EC69DDA_63716B2B + + + + + + + +SCHCRWLR_5EC69DDA_63716B2B command_6371df8a:w->command_6371df8a:e - - - - - - - -SCHCRWLR_63716B2B_63716B2B + + + + + + + +SCHCRWLR_63716B2B_63716B2B - + command_6371df8a:w->package_fab13485:e - - - - - - - -SCHCRWLR_FAB0C026_63716B2B + + + + + + + +SCHCRWLR_FAB0C026_63716B2B command_6371df8a:w->spec_27641a:e - - - - - - - -SCHCRWLR_0026EFBB_63716B2B + + + + + + + +SCHCRWLR_0026EFBB_63716B2B command_6371df8a:w->spec_27641a:e - - - - - - - -SCHCRWLR_0026EFBB_63716B2B + + + + + + + +SCHCRWLR_0026EFBB_63716B2B data_type_cluster_8d9f2ca9 - -DATA_TYPE_CLUSTER - -[table] -DATA_TYPE_CLUSTER_ID - -INTEGER NOT NULL - -auto-incremented -CLUSTER_REF - -INTEGER -CLUSTER_CODE - -INTEGER -DATA_TYPE_REF - -INTEGER - + +DATA_TYPE_CLUSTER + +[table] +DATA_TYPE_CLUSTER_ID + +INTEGER NOT NULL + +auto-incremented +CLUSTER_REF + +INTEGER +CLUSTER_CODE + +INTEGER +DATA_TYPE_REF + +INTEGER + data_type_cluster_8d9f2ca9:w->cluster_5ec71239:e - - - - - - - -SCHCRWLR_5EC69DDA_8D9EB84A + + + + + + + +SCHCRWLR_5EC69DDA_8D9EB84A data_type_cluster_8d9f2ca9:w->data_type_9233070e:e - - - - - - - -SCHCRWLR_923292AF_8D9EB84A + + + + + + + +SCHCRWLR_923292AF_8D9EB84A device_type_cluster_7298b97d:w->cluster_5ec71239:e - - - - - - - -SCHCRWLR_5EC69DDA_7298451E + + + + + + + +SCHCRWLR_5EC69DDA_7298451E device_type_2620a7e2 - -DEVICE_TYPE - -[table] -DEVICE_TYPE_ID - -INTEGER - -auto-incremented -PACKAGE_REF - -INTEGER -DOMAIN - -TEXT -CODE - -INTEGER -PROFILE_ID - -INTEGER -NAME - -TEXT -DESCRIPTION - -TEXT -CLASS - -TEXT -"SCOPE" - -TEXT -SUPERSET - -TEXT - + +DEVICE_TYPE + +[table] +DEVICE_TYPE_ID + +INTEGER + +auto-incremented +PACKAGE_REF + +INTEGER +DOMAIN + +TEXT +CODE + +INTEGER +PROFILE_ID + +INTEGER +NAME + +TEXT +DESCRIPTION + +TEXT +CLASS + +TEXT +"SCOPE" + +TEXT +SUPERSET + +TEXT + - + device_type_cluster_7298b97d:w->device_type_2620a7e2:e - - - - - - - -SCHCRWLR_26203383_7298451E + + + + + + + +SCHCRWLR_26203383_7298451E endpoint_type_cluster_c12e3c9e:w->cluster_5ec71239:e - - - - - - - -SCHCRWLR_5EC69DDA_C12DC83F + + + + + + + +SCHCRWLR_5EC69DDA_C12DC83F endpoint_type_9857dc03 - -ENDPOINT_TYPE - -[table] -ENDPOINT_TYPE_ID - -INTEGER - -auto-incremented -SESSION_PARTITION_REF - -INTEGER -NAME - -TEXT - + +ENDPOINT_TYPE + +[table] +ENDPOINT_TYPE_ID + +INTEGER + +auto-incremented +SESSION_PARTITION_REF + +INTEGER +NAME + +TEXT + - + endpoint_type_cluster_c12e3c9e:w->endpoint_type_9857dc03:e - - - - - - - -SCHCRWLR_985767A4_C12DC83F + + + + + + + +SCHCRWLR_985767A4_C12DC83F event_3f4eed9:w->cluster_5ec71239:e - - - - - - - -SCHCRWLR_5EC69DDA_03F47A7A + + + + + + + +SCHCRWLR_5EC69DDA_03F47A7A event_3f4eed9:w->package_fab13485:e - - - - - - - -SCHCRWLR_FAB0C026_03F47A7A + + + + + + + +SCHCRWLR_FAB0C026_03F47A7A event_3f4eed9:w->spec_27641a:e - - - - - - - -SCHCRWLR_0026EFBB_03F47A7A + + + + + + + +SCHCRWLR_0026EFBB_03F47A7A event_3f4eed9:w->spec_27641a:e - - - - - - - -SCHCRWLR_0026EFBB_03F47A7A + + + + + + + +SCHCRWLR_0026EFBB_03F47A7A feature_f06e7b35 - -FEATURE - -[table] -FEATURE_ID - -INTEGER - -auto-incremented -NAME - -TEXT -CODE - -TEXT -BIT - -INTEGER -DEFAULT_VALUE - -INTEGER -DESCRIPTION - -TEXT -CONFORMANCE - -TEXT -PACKAGE_REF - -INTEGER -CLUSTER_REF - -INTEGER - + +FEATURE + +[table] +FEATURE_ID + +INTEGER + +auto-incremented +NAME + +TEXT +CODE + +TEXT +BIT + +INTEGER +DEFAULT_VALUE + +INTEGER +DESCRIPTION + +TEXT +CONFORMANCE + +TEXT +PACKAGE_REF + +INTEGER +CLUSTER_REF + +INTEGER + feature_f06e7b35:w->cluster_5ec71239:e - - - - - - - -SCHCRWLR_5EC69DDA_F06E06D6 + + + + + + + +SCHCRWLR_5EC69DDA_F06E06D6 feature_f06e7b35:w->package_fab13485:e - - - - - - - -SCHCRWLR_FAB0C026_F06E06D6 + + + + + + + +SCHCRWLR_FAB0C026_F06E06D6 tag_1b7d9 - -TAG - -[table] -TAG_ID - -INTEGER - -auto-incremented -PACKAGE_REF - -INTEGER -CLUSTER_REF - -INTEGER -NAME - -TEXT -DESCRIPTION - -TEXT - + +TAG + +[table] +TAG_ID + +INTEGER + +auto-incremented +PACKAGE_REF + +INTEGER +CLUSTER_REF + +INTEGER +NAME + +TEXT +DESCRIPTION + +TEXT + tag_1b7d9:w->cluster_5ec71239:e - - - - - - - -SCHCRWLR_5EC69DDA_0001437A + + + + + + + +SCHCRWLR_5EC69DDA_0001437A tag_1b7d9:w->package_fab13485:e - - - - - - - -SCHCRWLR_FAB0C026_0001437A + + + + + + + +SCHCRWLR_FAB0C026_0001437A command_arg_294e7f81 - -COMMAND_ARG - -[table] -COMMAND_REF - -INTEGER -FIELD_IDENTIFIER - -INTEGER -NAME - -TEXT -TYPE - -TEXT -MIN - -TEXT -MAX - -TEXT -MIN_LENGTH - -INTEGER -MAX_LENGTH - -INTEGER -IS_ARRAY - -INTEGER -PRESENT_IF - -TEXT -IS_NULLABLE - -INTEGER -IS_OPTIONAL - -INTEGER -COUNT_ARG - -TEXT -INTRODUCED_IN_REF - -INTEGER -REMOVED_IN_REF - -INTEGER - + +COMMAND_ARG + +[table] +COMMAND_REF + +INTEGER +FIELD_IDENTIFIER + +INTEGER +NAME + +TEXT +TYPE + +TEXT +MIN + +TEXT +MAX + +TEXT +MIN_LENGTH + +INTEGER +MAX_LENGTH + +INTEGER +IS_ARRAY + +INTEGER +PRESENT_IF + +TEXT +IS_NULLABLE + +INTEGER +IS_OPTIONAL + +INTEGER +COUNT_ARG + +TEXT +INTRODUCED_IN_REF + +INTEGER +REMOVED_IN_REF + +INTEGER + command_arg_294e7f81:w->command_6371df8a:e - - - - - - - -SCHCRWLR_63716B2B_294E0B22 + + + + + + + +SCHCRWLR_63716B2B_294E0B22 command_arg_294e7f81:w->spec_27641a:e - - - - - - - -SCHCRWLR_0026EFBB_294E0B22 + + + + + + + +SCHCRWLR_0026EFBB_294E0B22 command_arg_294e7f81:w->spec_27641a:e - - - - - - - -SCHCRWLR_0026EFBB_294E0B22 + + + + + + + +SCHCRWLR_0026EFBB_294E0B22 device_type_command_774386ce - -DEVICE_TYPE_COMMAND - -[table] -DEVICE_TYPE_CLUSTER_REF - -INTEGER -COMMAND_REF - -INTEGER -COMMAND_NAME - -TEXT - + +DEVICE_TYPE_COMMAND + +[table] +DEVICE_TYPE_CLUSTER_REF + +INTEGER +COMMAND_REF + +INTEGER +COMMAND_NAME + +TEXT + device_type_command_774386ce:w->command_6371df8a:e - - - - - - - -SCHCRWLR_63716B2B_7743126F + + + + + + + +SCHCRWLR_63716B2B_7743126F - + device_type_command_774386ce:w->device_type_cluster_7298b97d:e - - - - - - - -SCHCRWLR_7298451E_7743126F + + + + + + + +SCHCRWLR_7298451E_7743126F endpoint_type_command_c5d909ef - -ENDPOINT_TYPE_COMMAND - -[table] -ENDPOINT_TYPE_COMMAND_ID - -INTEGER - -auto-incremented -ENDPOINT_TYPE_CLUSTER_REF - -INTEGER -COMMAND_REF - -INTEGER -IS_INCOMING - -INTEGER -IS_ENABLED - -INTEGER - + +ENDPOINT_TYPE_COMMAND + +[table] +ENDPOINT_TYPE_COMMAND_ID + +INTEGER + +auto-incremented +ENDPOINT_TYPE_CLUSTER_REF + +INTEGER +COMMAND_REF + +INTEGER +IS_INCOMING + +INTEGER +IS_ENABLED + +INTEGER + endpoint_type_command_c5d909ef:w->command_6371df8a:e - - - - - - - -SCHCRWLR_63716B2B_C5D89590 + + + + + + + +SCHCRWLR_63716B2B_C5D89590 - + endpoint_type_command_c5d909ef:w->endpoint_type_cluster_c12e3c9e:e - - - - - - - -SCHCRWLR_C12DC83F_C5D89590 + + + + + + + +SCHCRWLR_C12DC83F_C5D89590 - + discriminator_4931d2db - -DISCRIMINATOR - -[table] -DISCRIMINATOR_ID - -INTEGER NOT NULL - -auto-incremented -NAME - -TEXT -PACKAGE_REF - -INTEGER - + +DISCRIMINATOR + +[table] +DISCRIMINATOR_ID + +INTEGER NOT NULL + +auto-incremented +NAME + +TEXT +PACKAGE_REF + +INTEGER + - + data_type_9233070e:w->discriminator_4931d2db:e - - - - - - - -SCHCRWLR_49315E7C_923292AF + + + + + + + +SCHCRWLR_49315E7C_923292AF - + data_type_9233070e:w->package_fab13485:e - - - - - - - -SCHCRWLR_FAB0C026_923292AF + + + + + + + +SCHCRWLR_FAB0C026_923292AF enum_210160 - -ENUM - -[table] -ENUM_ID - -INTEGER NOT NULL -SIZE - -INTEGER - + +ENUM + +[table] +ENUM_ID + +INTEGER NOT NULL +SIZE + +INTEGER + enum_210160:w->data_type_9233070e:e - - - - - - - -SCHCRWLR_923292AF_00208D01 + + + + + + + +SCHCRWLR_923292AF_00208D01 number_89ec43a8 - -NUMBER - -[table] -NUMBER_ID - -INTEGER NOT NULL -SIZE - -INTEGER -IS_SIGNED - -INTEGER - + +NUMBER + +[table] +NUMBER_ID + +INTEGER NOT NULL +SIZE + +INTEGER +IS_SIGNED + +INTEGER + number_89ec43a8:w->data_type_9233070e:e - - - - - - - -SCHCRWLR_923292AF_89EBCF49 + + + + + + + +SCHCRWLR_923292AF_89EBCF49 string_9268c870 - -STRING - -[table] -STRING_ID - -INTEGER NOT NULL -IS_LONG - -INTEGER -SIZE - -INTEGER -IS_CHAR - -INTEGER - + +STRING + +[table] +STRING_ID + +INTEGER NOT NULL +IS_LONG + +INTEGER +SIZE + +INTEGER +IS_CHAR + +INTEGER + string_9268c870:w->data_type_9233070e:e - - - - - - - -SCHCRWLR_923292AF_92685411 + + + + + + + +SCHCRWLR_923292AF_92685411 struct_9268f434 - -STRUCT - -[table] -STRUCT_ID - -INTEGER NOT NULL -IS_FABRIC_SCOPED - -INTEGER -SIZE - -INTEGER -API_MATURITY - -TEXT - + +STRUCT + +[table] +STRUCT_ID + +INTEGER NOT NULL +IS_FABRIC_SCOPED + +INTEGER +SIZE + +INTEGER +API_MATURITY + +TEXT + struct_9268f434:w->data_type_9233070e:e - - - - - - - -SCHCRWLR_923292AF_92687FD5 + + + + + + + +SCHCRWLR_923292AF_92687FD5 struct_item_d6e4bd9c - -STRUCT_ITEM - -[table] -STRUCT_ITEM_ID - -INTEGER NOT NULL - -auto-incremented -STRUCT_REF - -INTEGER -FIELD_IDENTIFIER - -INTEGER -NAME - -TEXT(100) -IS_ARRAY - -INTEGER -IS_ENUM - -INTEGER -MIN_LENGTH - -INTEGER -MAX_LENGTH - -INTEGER -IS_WRITABLE - -INTEGER -IS_NULLABLE - -INTEGER -IS_OPTIONAL - -INTEGER -IS_FABRIC_SENSITIVE - -INTEGER -SIZE - -INTEGER -DATA_TYPE_REF - -INTEGER NOT NULL - + +STRUCT_ITEM + +[table] +STRUCT_ITEM_ID + +INTEGER NOT NULL + +auto-incremented +STRUCT_REF + +INTEGER +FIELD_IDENTIFIER + +INTEGER +NAME + +TEXT(100) +IS_ARRAY + +INTEGER +IS_ENUM + +INTEGER +MIN_LENGTH + +INTEGER +MAX_LENGTH + +INTEGER +IS_WRITABLE + +INTEGER +IS_NULLABLE + +INTEGER +IS_OPTIONAL + +INTEGER +IS_FABRIC_SENSITIVE + +INTEGER +SIZE + +INTEGER +DATA_TYPE_REF + +INTEGER NOT NULL + struct_item_d6e4bd9c:w->data_type_9233070e:e - - - - - - - -SCHCRWLR_923292AF_D6E4493D + + + + + + + +SCHCRWLR_923292AF_D6E4493D struct_item_d6e4bd9c:w->struct_9268f434:e - - - - - - - -SCHCRWLR_92687FD5_D6E4493D + + + + + + + +SCHCRWLR_92687FD5_D6E4493D device_composition_eab6b180 - -DEVICE_COMPOSITION - -[table] -DEVICE_COMPOSITION_ID - -INTEGER - -auto-incremented -PACKAGE_REF - -INTEGER -CODE - -INTEGER -ENDPOINT_COMPOSITION_REF - -INTEGER -CONFORMANCE - -TEXT -"CONSTRAINT" - -INTEGER - + +DEVICE_COMPOSITION + +[table] +DEVICE_COMPOSITION_ID + +INTEGER + +auto-incremented +CODE + +INTEGER +DEVICE_TYPE_REF + +INTEGER +ENDPOINT_COMPOSITION_REF + +INTEGER +CONFORMANCE + +TEXT +DEVICE_CONSTRAINT + +INTEGER + + + + +device_composition_eab6b180:w->device_type_2620a7e2:e + + + + + + + +SCHCRWLR_26203383_EAB63D21 - + endpoint_composition_fdc3c63f - -ENDPOINT_COMPOSITION - -[table] -ENDPOINT_COMPOSITION_ID - -INTEGER - -auto-incremented -PACKAGE_REF - -INTEGER -TYPE - -TEXT -CODE - -INTEGER - + +ENDPOINT_COMPOSITION + +[table] +ENDPOINT_COMPOSITION_ID + +INTEGER + +auto-incremented +DEVICE_TYPE_REF + +INTEGER +TYPE + +TEXT +CODE + +INTEGER + - + device_composition_eab6b180:w->endpoint_composition_fdc3c63f:e - - - - - - - -SCHCRWLR_FDC351E0_EAB63D21 - - - -device_composition_eab6b180:w->package_fab13485:e - - - - - - - -SCHCRWLR_FAB0C026_EAB63D21 + + + + + + + +SCHCRWLR_FDC351E0_EAB63D21 - + device_type_2620a7e2:w->package_fab13485:e - - - - - - - -SCHCRWLR_FAB0C026_26203383 + + + + + + + +SCHCRWLR_FAB0C026_26203383 + + + +endpoint_composition_fdc3c63f:w->device_type_2620a7e2:e + + + + + + + +SCHCRWLR_26203383_FDC351E0 - + endpoint_type_device_e685fbb0 - -ENDPOINT_TYPE_DEVICE - -[table] -ENDPOINT_TYPE_DEVICE_ID - -INTEGER - -auto-incremented -DEVICE_TYPE_REF - -INTEGER -ENDPOINT_TYPE_REF - -INTEGER -DEVICE_TYPE_ORDER - -INTEGER -DEVICE_IDENTIFIER - -INTEGER -DEVICE_VERSION - -INTEGER - + +ENDPOINT_TYPE_DEVICE + +[table] +ENDPOINT_TYPE_DEVICE_ID + +INTEGER + +auto-incremented +DEVICE_TYPE_REF + +INTEGER +ENDPOINT_TYPE_REF + +INTEGER +DEVICE_TYPE_ORDER + +INTEGER +DEVICE_IDENTIFIER + +INTEGER +DEVICE_VERSION + +INTEGER + - + endpoint_type_device_e685fbb0:w->device_type_2620a7e2:e - - - - - - - -SCHCRWLR_26203383_E6858751 + + + + + + + +SCHCRWLR_26203383_E6858751 - + endpoint_type_device_e685fbb0:w->endpoint_type_9857dc03:e - - - - - - - -SCHCRWLR_985767A4_E6858751 + + + + + + + +SCHCRWLR_985767A4_E6858751 - + device_type_feature_4402279 - -DEVICE_TYPE_FEATURE - -[table] -DEVICE_TYPE_CLUSTER_REF - -INTEGER -FEATURE_REF - -INTEGER -FEATURE_CODE - -TEXT - + +DEVICE_TYPE_FEATURE + +[table] +DEVICE_TYPE_CLUSTER_REF + +INTEGER +FEATURE_REF + +INTEGER +FEATURE_CODE + +TEXT + - + device_type_feature_4402279:w->device_type_cluster_7298b97d:e - - - - - - - -SCHCRWLR_7298451E_043FAE1A + + + + + + + +SCHCRWLR_7298451E_043FAE1A - + device_type_feature_4402279:w->feature_f06e7b35:e - - - - - - - -SCHCRWLR_F06E06D6_043FAE1A + + + + + + + +SCHCRWLR_F06E06D6_043FAE1A - + discriminator_4931d2db:w->package_fab13485:e - - - - - - - -SCHCRWLR_FAB0C026_49315E7C + + + + + + + +SCHCRWLR_FAB0C026_49315E7C - + domain_78873d23 - -DOMAIN - -[table] -DOMAIN_ID - -INTEGER - -auto-incremented -PACKAGE_REF - -INTEGER -NAME - -TEXT -LATEST_SPEC_REF - -INTEGER - + +DOMAIN + +[table] +DOMAIN_ID + +INTEGER + +auto-incremented +PACKAGE_REF + +INTEGER +NAME + +TEXT +LATEST_SPEC_REF + +INTEGER + - + domain_78873d23:w->package_fab13485:e - - - - - - - -SCHCRWLR_FAB0C026_7886C8C4 + + + + + + + +SCHCRWLR_FAB0C026_7886C8C4 domain_78873d23:w->spec_27641a:e - - - - - - - -SCHCRWLR_0026EFBB_7886C8C4 + + + + + + + +SCHCRWLR_0026EFBB_7886C8C4 - + endpoint_966d81f4 - -ENDPOINT - -[table] -ENDPOINT_ID - -INTEGER - -auto-incremented -SESSION_REF - -INTEGER -ENDPOINT_TYPE_REF - -INTEGER -PROFILE - -INTEGER -ENDPOINT_IDENTIFIER - -INTEGER -NETWORK_IDENTIFIER - -INTEGER -PARENT_ENDPOINT_REF - -INTEGER - + +ENDPOINT + +[table] +ENDPOINT_ID + +INTEGER + +auto-incremented +SESSION_REF + +INTEGER +ENDPOINT_TYPE_REF + +INTEGER +PROFILE + +INTEGER +ENDPOINT_IDENTIFIER + +INTEGER +NETWORK_IDENTIFIER + +INTEGER +PARENT_ENDPOINT_REF + +INTEGER + - + endpoint_966d81f4:w->endpoint_966d81f4:e - - - - - - - -SCHCRWLR_966D0D95_966D0D95 + + + + + + + +SCHCRWLR_966D0D95_966D0D95 - + endpoint_966d81f4:w->endpoint_type_9857dc03:e - - - - - - - -SCHCRWLR_985767A4_966D0D95 + + + + + + + +SCHCRWLR_985767A4_966D0D95 session_a11c82d5 - -SESSION - -[table] -SESSION_ID - -INTEGER - -auto-incremented -USER_REF - -INTEGER -SESSION_KEY - -TEXT -CREATION_TIME - -INTEGER -DIRTY - -INTEGER -NEW_NOTIFICATION - -INTEGER - + +SESSION + +[table] +SESSION_ID + +INTEGER + +auto-incremented +USER_REF + +INTEGER +SESSION_KEY + +TEXT +CREATION_TIME + +INTEGER +DIRTY + +INTEGER +NEW_NOTIFICATION + +INTEGER + endpoint_966d81f4:w->session_a11c82d5:e - - - - - - - -SCHCRWLR_A11C0E76_966D0D95 - - - -endpoint_composition_fdc3c63f:w->package_fab13485:e - - - - - - - -SCHCRWLR_FAB0C026_FDC351E0 + + + + + + + +SCHCRWLR_A11C0E76_966D0D95 session_partition_f35f84a0 - -SESSION_PARTITION - -[table] -SESSION_PARTITION_ID - -INTEGER - -auto-incremented -SESSION_PARTITION_NUMBER - -INTEGER -SESSION_REF - -INTEGER - + +SESSION_PARTITION + +[table] +SESSION_PARTITION_ID + +INTEGER + +auto-incremented +SESSION_PARTITION_NUMBER + +INTEGER +SESSION_REF + +INTEGER + endpoint_type_9857dc03:w->session_partition_f35f84a0:e - - - - - - - -SCHCRWLR_F35F1041_985767A4 + + + + + + + +SCHCRWLR_F35F1041_985767A4 endpoint_type_event_e67d6e7e - -ENDPOINT_TYPE_EVENT - -[table] -ENDPOINT_TYPE_EVENT_ID - -INTEGER - -auto-incremented -ENDPOINT_TYPE_CLUSTER_REF - -INTEGER -EVENT_REF - -INTEGER -INCLUDED - -INTEGER - + +ENDPOINT_TYPE_EVENT + +[table] +ENDPOINT_TYPE_EVENT_ID + +INTEGER + +auto-incremented +ENDPOINT_TYPE_CLUSTER_REF + +INTEGER +EVENT_REF + +INTEGER +INCLUDED + +INTEGER + - + endpoint_type_event_e67d6e7e:w->endpoint_type_cluster_c12e3c9e:e - - - - - - - -SCHCRWLR_C12DC83F_E67CFA1F + + + + + + + +SCHCRWLR_C12DC83F_E67CFA1F - + endpoint_type_event_e67d6e7e:w->event_3f4eed9:e - - - - - - - -SCHCRWLR_03F47A7A_E67CFA1F + + + + + + + +SCHCRWLR_03F47A7A_E67CFA1F enum_item_b6420bf0 - -ENUM_ITEM - -[table] -ENUM_ITEM_ID - -INTEGER NOT NULL - -auto-incremented -ENUM_REF - -INTEGER -NAME - -TEXT -DESCRIPTION - -TEXT -FIELD_IDENTIFIER - -INTEGER -"VALUE" - -INTEGER - + +ENUM_ITEM + +[table] +ENUM_ITEM_ID + +INTEGER NOT NULL + +auto-incremented +ENUM_REF + +INTEGER +NAME + +TEXT +DESCRIPTION + +TEXT +FIELD_IDENTIFIER + +INTEGER +"VALUE" + +INTEGER + - + enum_item_b6420bf0:w->enum_210160:e - - - - - - - -SCHCRWLR_00208D01_B6419791 + + + + + + + +SCHCRWLR_00208D01_B6419791 event_field_d102b734 - -EVENT_FIELD - -[table] -EVENT_REF - -INTEGER -FIELD_IDENTIFIER - -INTEGER -NAME - -TEXT -TYPE - -TEXT -IS_ARRAY - -INTEGER -IS_NULLABLE - -INTEGER -IS_OPTIONAL - -INTEGER -INTRODUCED_IN_REF - -INTEGER -REMOVED_IN_REF - -INTEGER - + +EVENT_FIELD + +[table] +EVENT_REF + +INTEGER +FIELD_IDENTIFIER + +INTEGER +NAME + +TEXT +TYPE + +TEXT +IS_ARRAY + +INTEGER +IS_NULLABLE + +INTEGER +IS_OPTIONAL + +INTEGER +INTRODUCED_IN_REF + +INTEGER +REMOVED_IN_REF + +INTEGER + - + event_field_d102b734:w->event_3f4eed9:e - - - - - - - -SCHCRWLR_03F47A7A_D10242D5 + + + + + + + +SCHCRWLR_03F47A7A_D10242D5 event_field_d102b734:w->spec_27641a:e - - - - - - - -SCHCRWLR_0026EFBB_D10242D5 + + + + + + + +SCHCRWLR_0026EFBB_D10242D5 event_field_d102b734:w->spec_27641a:e - - - - - - - -SCHCRWLR_0026EFBB_D10242D5 + + + + + + + +SCHCRWLR_0026EFBB_D10242D5 global_attribute_bit_e934f16d - -GLOBAL_ATTRIBUTE_BIT - -[table] -GLOBAL_ATTRIBUTE_DEFAULT_REF - -INTEGER NOT NULL -BIT - -INTEGER NOT NULL -"VALUE" - -INTEGER -TAG_REF - -INTEGER NOT NULL - + +GLOBAL_ATTRIBUTE_BIT + +[table] +GLOBAL_ATTRIBUTE_DEFAULT_REF + +INTEGER NOT NULL +BIT + +INTEGER NOT NULL +"VALUE" + +INTEGER +TAG_REF + +INTEGER NOT NULL + - + global_attribute_bit_e934f16d:w->global_attribute_default_73c65a21:e - - - - - - - -SCHCRWLR_73C5E5C2_E9347D0E + + + + + + + +SCHCRWLR_73C5E5C2_E9347D0E global_attribute_bit_e934f16d:w->tag_1b7d9:e - - - - - - - -SCHCRWLR_0001437A_E9347D0E + + + + + + + +SCHCRWLR_0001437A_E9347D0E operation_93359a6:w->package_fab13485:e - - - - - - - -SCHCRWLR_FAB0C026_0932E547 + + + + + + + +SCHCRWLR_FAB0C026_0932E547 - + package_fab13485:w->package_fab13485:e - - - - - - - -SCHCRWLR_FAB0C026_FAB0C026 + + + + + + + +SCHCRWLR_FAB0C026_FAB0C026 package_extension_2789e3a5 - -PACKAGE_EXTENSION - -[table] -PACKAGE_EXTENSION_ID - -INTEGER - -auto-incremented -PACKAGE_REF - -INTEGER -ENTITY - -TEXT -PROPERTY - -TEXT -TYPE - -TEXT -CONFIGURABILITY - -TEXT -LABEL - -TEXT -GLOBAL_DEFAULT - -TEXT - + +PACKAGE_EXTENSION + +[table] +PACKAGE_EXTENSION_ID + +INTEGER + +auto-incremented +PACKAGE_REF + +INTEGER +ENTITY + +TEXT +PROPERTY + +TEXT +TYPE + +TEXT +CONFIGURABILITY + +TEXT +LABEL + +TEXT +GLOBAL_DEFAULT + +TEXT + package_extension_2789e3a5:w->package_fab13485:e - - - - - - - -SCHCRWLR_FAB0C026_27896F46 + + + + + + + +SCHCRWLR_FAB0C026_27896F46 package_notice_176ee570 - -PACKAGE_NOTICE - -[table] -PACKAGE_REF - -INTEGER -NOTICE_TYPE - -TEXT -NOTICE_MESSAGE - -TEXT -NOTICE_SEVERITY - -INTEGER -NOTICE_ID - -INTEGER - -auto-incremented - + +PACKAGE_NOTICE + +[table] +PACKAGE_REF + +INTEGER +NOTICE_TYPE + +TEXT +NOTICE_MESSAGE + +TEXT +NOTICE_SEVERITY + +INTEGER +NOTICE_ID + +INTEGER + +auto-incremented + package_notice_176ee570:w->package_fab13485:e - - - - - - - -SCHCRWLR_FAB0C026_176E7111 + + + + + + + +SCHCRWLR_FAB0C026_176E7111 package_option_1931d70d - -PACKAGE_OPTION - -[table] -OPTION_ID - -INTEGER - -auto-incremented -PACKAGE_REF - -INTEGER -OPTION_CATEGORY - -TEXT -OPTION_CODE - -TEXT -OPTION_LABEL - -TEXT - + +PACKAGE_OPTION + +[table] +OPTION_ID + +INTEGER + +auto-incremented +PACKAGE_REF + +INTEGER +OPTION_CATEGORY + +TEXT +OPTION_CODE + +TEXT +OPTION_LABEL + +TEXT + package_option_1931d70d:w->package_fab13485:e - - - - - - - -SCHCRWLR_FAB0C026_193162AE + + + + + + + +SCHCRWLR_FAB0C026_193162AE package_option_default_64a251ef - -PACKAGE_OPTION_DEFAULT - -[table] -OPTION_DEFAULT_ID - -INTEGER - -auto-incremented -PACKAGE_REF - -INTEGER -OPTION_CATEGORY - -TEXT -OPTION_REF - -INTEGER - + +PACKAGE_OPTION_DEFAULT + +[table] +OPTION_DEFAULT_ID + +INTEGER + +auto-incremented +PACKAGE_REF + +INTEGER +OPTION_CATEGORY + +TEXT +OPTION_REF + +INTEGER + package_option_default_64a251ef:w->package_fab13485:e - - - - - - - -SCHCRWLR_FAB0C026_64A1DD90 + + + + + + + +SCHCRWLR_FAB0C026_64A1DD90 package_option_default_64a251ef:w->package_option_1931d70d:e - - - - - - - -SCHCRWLR_193162AE_64A1DD90 + + + + + + + +SCHCRWLR_193162AE_64A1DD90 role_26ecd5:w->package_fab13485:e - - - - - - - -SCHCRWLR_FAB0C026_00267876 + + + + + + + +SCHCRWLR_FAB0C026_00267876 session_package_61fa13bc - -SESSION_PACKAGE - -[table] -SESSION_PARTITION_REF - -INTEGER -PACKAGE_REF - -INTEGER -REQUIRED - -INTEGER -ENABLED - -INTEGER - + +SESSION_PACKAGE + +[table] +SESSION_PARTITION_REF + +INTEGER +PACKAGE_REF + +INTEGER +REQUIRED + +INTEGER +ENABLED + +INTEGER + session_package_61fa13bc:w->package_fab13485:e - - - - - - - -SCHCRWLR_FAB0C026_61F99F5D + + + + + + + +SCHCRWLR_FAB0C026_61F99F5D session_package_61fa13bc:w->session_partition_f35f84a0:e - - - - - - - -SCHCRWLR_F35F1041_61F99F5D + + + + + + + +SCHCRWLR_F35F1041_61F99F5D spec_27641a:w->package_fab13485:e - - - - - - - -SCHCRWLR_FAB0C026_0026EFBB + + + + + + + +SCHCRWLR_FAB0C026_0026EFBB package_extension_default_d8d04687 - -PACKAGE_EXTENSION_DEFAULT - -[table] -PACKAGE_EXTENSION_REF - -INTEGER -ENTITY_CODE - -INTEGER -ENTITY_QUALIFIER - -TEXT -PARENT_CODE - -INTEGER -MANUFACTURER_CODE - -INTEGER -"VALUE" - -TEXT - + +PACKAGE_EXTENSION_DEFAULT + +[table] +PACKAGE_EXTENSION_REF + +INTEGER +ENTITY_CODE + +INTEGER +ENTITY_QUALIFIER + +TEXT +PARENT_CODE + +INTEGER +MANUFACTURER_CODE + +INTEGER +"VALUE" + +TEXT + package_extension_default_d8d04687:w->package_extension_2789e3a5:e - - - - - - - -SCHCRWLR_27896F46_D8CFD228 + + + + + + + +SCHCRWLR_27896F46_D8CFD228 package_extension_value_8e65d377 - -PACKAGE_EXTENSION_VALUE - -[table] -PACKAGE_EXTENSION_VALUE_ID - -INTEGER - -auto-incremented -PACKAGE_EXTENSION_REF - -INTEGER -SESSION_REF - -INTEGER -ENTITY_CODE - -INTEGER -PARENT_CODE - -INTEGER -"VALUE" - -TEXT - + +PACKAGE_EXTENSION_VALUE + +[table] +PACKAGE_EXTENSION_VALUE_ID + +INTEGER + +auto-incremented +PACKAGE_EXTENSION_REF + +INTEGER +SESSION_REF + +INTEGER +ENTITY_CODE + +INTEGER +PARENT_CODE + +INTEGER +"VALUE" + +TEXT + package_extension_value_8e65d377:w->package_extension_2789e3a5:e - - - - - - - -SCHCRWLR_27896F46_8E655F18 + + + + + + + +SCHCRWLR_27896F46_8E655F18 package_extension_value_8e65d377:w->session_a11c82d5:e - - - - - - - -SCHCRWLR_A11C0E76_8E655F18 + + + + + + + +SCHCRWLR_A11C0E76_8E655F18 user_28582a - -"USER" - -[table] -USER_ID - -INTEGER - -auto-incremented -USER_KEY - -TEXT -CREATION_TIME - -INTEGER - + +"USER" + +[table] +USER_ID + +INTEGER + +auto-incremented +USER_KEY + +TEXT +CREATION_TIME + +INTEGER + session_a11c82d5:w->user_28582a:e - - - - - - - -SCHCRWLR_3ED95AD5_A11C0E76 + + + + + + + +SCHCRWLR_3ED95AD5_A11C0E76 session_key_value_334d9527 - -SESSION_KEY_VALUE - -[table] -SESSION_REF - -INTEGER -KEY - -TEXT -"VALUE" - -TEXT - + +SESSION_KEY_VALUE + +[table] +SESSION_REF + +INTEGER +KEY + +TEXT +"VALUE" + +TEXT + session_key_value_334d9527:w->session_a11c82d5:e - - - - - - - -SCHCRWLR_A11C0E76_334D20C8 + + + + + + + +SCHCRWLR_A11C0E76_334D20C8 session_log_7f10ae3a - -SESSION_LOG - -[table] -SESSION_REF - -INTEGER -"TIMESTAMP" - -TEXT -LOG - -TEXT - + +SESSION_LOG + +[table] +SESSION_REF + +INTEGER +"TIMESTAMP" + +TEXT +LOG + +TEXT + session_log_7f10ae3a:w->session_a11c82d5:e - - - - - - - -SCHCRWLR_A11C0E76_7F1039DB + + + + + + + +SCHCRWLR_A11C0E76_7F1039DB session_notice_84addd20 - -SESSION_NOTICE - -[table] -SESSION_REF - -INTEGER -NOTICE_TYPE - -TEXT -NOTICE_MESSAGE - -TEXT -NOTICE_SEVERITY - -INTEGER -NOTICE_ID - -INTEGER - -auto-incremented -DISPLAY - -INTEGER -SEEN - -INTEGER - + +SESSION_NOTICE + +[table] +SESSION_REF + +INTEGER +NOTICE_TYPE + +TEXT +NOTICE_MESSAGE + +TEXT +NOTICE_SEVERITY + +INTEGER +NOTICE_ID + +INTEGER + +auto-incremented +DISPLAY + +INTEGER +SEEN + +INTEGER + session_notice_84addd20:w->session_a11c82d5:e - - - - - - - -SCHCRWLR_A11C0E76_84AD68C1 + + + + + + + +SCHCRWLR_A11C0E76_84AD68C1 session_partition_f35f84a0:w->session_a11c82d5:e - - - - - - - -SCHCRWLR_A11C0E76_F35F1041 + + + + + + + +SCHCRWLR_A11C0E76_F35F1041 setting_a12b0e8f - -SETTING - -[table] -CATEGORY - -TEXT -KEY - -TEXT -"VALUE" - -TEXT - + +SETTING + +[table] +CATEGORY + +TEXT +KEY + +TEXT +"VALUE" + +TEXT + From 248802fdd027b9b2ed476d9b42f03dafff93f13a Mon Sep 17 00:00:00 2001 From: Paul Regan Date: Wed, 21 Aug 2024 13:04:44 -0400 Subject: [PATCH 6/6] fixing formatting with prettier update --- src-electron/db/query-loader.js | 140 +++++++------ src-electron/rest/user-data.js | 92 ++++----- src-electron/zcl/zcl-loader-silabs.js | 278 +++++++++++++------------- 3 files changed, 261 insertions(+), 249 deletions(-) diff --git a/src-electron/db/query-loader.js b/src-electron/db/query-loader.js index 001419df18..d5ce44b13a 100644 --- a/src-electron/db/query-loader.js +++ b/src-electron/db/query-loader.js @@ -327,7 +327,7 @@ async function insertAttributeAccessData(db, packageId, accessData) { return dbApi.dbMultiInsert( db, `INSERT INTO ATTRIBUTE_ACCESS (ATTRIBUTE_REF, ACCESS_REF) VALUES (?,?)`, - insertData + insertData, ) } @@ -342,7 +342,7 @@ async function insertCommandAccessData(db, packageId, accessData) { return dbApi.dbMultiInsert( db, `INSERT INTO COMMAND_ACCESS (COMMAND_REF, ACCESS_REF) VALUES (?,?)`, - insertData + insertData, ) } // access data is array of objects, containing id/op/role/modifier @@ -356,7 +356,7 @@ async function insertEventAccessData(db, packageId, accessData) { return dbApi.dbMultiInsert( db, `INSERT INTO EVENT_ACCESS (EVENT_REF, ACCESS_REF) VALUES (?,?)`, - insertData + insertData, ) } @@ -427,7 +427,7 @@ async function insertAttributeMappings(db, data) { VALUES (${selectAttributeIdQuery}, ${selectAttributeIdQuery}) `, - data + data, ) } @@ -557,9 +557,9 @@ async function insertClusterExtensions(db, packageId, knownPackages, data) { .dbMultiSelect( db, `SELECT CLUSTER_ID FROM CLUSTER WHERE PACKAGE_REF IN (${dbApi.toInClause( - knownPackages + knownPackages, )}) AND CODE = ?`, - data.map((cluster) => [cluster.code]) + data.map((cluster) => [cluster.code]), ) .then((rows) => { let commands = { @@ -619,7 +619,7 @@ async function insertClusterExtensions(db, packageId, knownPackages, data) { 'WARNING', message, packageId, - 2 + 2, ) } } @@ -663,7 +663,7 @@ async function insertClusters(db, packageId, data) { packageId, cluster.apiMaturity, ] - }) + }), ) .then((lastIdsArray) => { let commands = { @@ -742,7 +742,7 @@ async function insertFeatures(db, packageId, data, clusterId) { feature.description, feature.conformance, clusterId, - ]) + ]), ) } @@ -758,7 +758,7 @@ async function insertTags(db, packageId, data, clusterRef) { return dbApi.dbMultiInsert( db, 'INSERT INTO TAG (PACKAGE_REF, CLUSTER_REF, NAME, DESCRIPTION) VALUES (?, ?, ?, ?)', - data.map((tag) => [packageId, clusterRef, tag.name, tag.description]) + data.map((tag) => [packageId, clusterRef, tag.name, tag.description]), ) } @@ -777,7 +777,7 @@ async function insertDomains(db, packageId, data) { return dbApi.dbMultiInsert( db, 'INSERT OR IGNORE INTO DOMAIN (PACKAGE_REF, NAME, LATEST_SPEC_REF) VALUES (?, ?, (SELECT SPEC_ID FROM SPEC WHERE PACKAGE_REF = ? AND CODE = ? ))', - data.map((domain) => [packageId, domain.name, packageId, domain.specCode]) + data.map((domain) => [packageId, domain.name, packageId, domain.specCode]), ) } @@ -805,7 +805,7 @@ async function insertSpecs(db, packageId, data) { older.specCode, older.specDescription, older.specCertifiable ? 1 : 0, - ]) + ]), ) } return dbApi.dbMultiInsert( @@ -816,7 +816,7 @@ async function insertSpecs(db, packageId, data) { domain.specCode, domain.specDescription, domain.specCertifiable ? 1 : 0, - ]) + ]), ) } @@ -853,7 +853,7 @@ async function insertGlobalAttributeDefault(db, packageId, clusterData) { ( SELECT ATTRIBUTE_ID FROM ATTRIBUTE WHERE PACKAGE_REF = ? AND CODE = ? AND SIDE = ? ), ?) `, - args + args, ) .then((individualGaIds) => { let featureBitArgs = [] @@ -890,7 +890,7 @@ INSERT OR IGNORE INTO GLOBAL_ATTRIBUTE_BIT ( (SELECT TAG_ID FROM TAG WHERE PACKAGE_REF = ? AND NAME = ?) ) `, - featureBitArgs + featureBitArgs, ) } }) @@ -923,7 +923,7 @@ async function insertAtomics(db, packageId, data) { at.isString, at.isLong, at.isChar, - ]) + ]), ) } @@ -944,13 +944,13 @@ async function insertEndpointComposition(db, composition, context) { return await dbApi.dbInsert( db, 'INSERT INTO ENDPOINT_COMPOSITION (TYPE, CODE) VALUES (?, ?)', - [dbEnum.composition.mandatoryEndpoint, composition.code] + [dbEnum.composition.mandatoryEndpoint, composition.code], ) } else { return await dbApi.dbInsert( db, 'INSERT INTO ENDPOINT_COMPOSITION (TYPE, CODE) VALUES (?, ?)', - [composition.compositionType, composition.code] + [composition.compositionType, composition.code], ) } } catch (error) { @@ -1040,7 +1040,7 @@ async function insertDeviceTypes(db, packageId, data) { dt.scope, dt.superset, ] - }) + }), ) .then((lastIdsArray) => { let zclIdsPromises = [] @@ -1063,20 +1063,20 @@ async function insertDeviceTypes(db, packageId, data) { cluster.clientLocked, cluster.serverLocked, ], - true + true, ) .then((deviceTypeClusterRef) => { return { dtClusterRef: deviceTypeClusterRef, clusterData: cluster, } - }) - ) + }), + ), ) .then((dtClusterRefDataPairs) => { let promises = [] promises.push( - insertDeviceTypeAttributes(db, dtClusterRefDataPairs) + insertDeviceTypeAttributes(db, dtClusterRefDataPairs), ) promises.push(insertDeviceTypeCommands(db, dtClusterRefDataPairs)) promises.push(insertDeviceTypeFeatures(db, dtClusterRefDataPairs)) @@ -1132,7 +1132,7 @@ async function insertDeviceTypeFeatures(db, dtClusterRefDataPairs) { return dbApi.dbMultiInsert( db, 'INSERT INTO DEVICE_TYPE_FEATURE (DEVICE_TYPE_CLUSTER_REF, FEATURE_CODE) VALUES (?, ?)', - features + features, ) } @@ -1156,7 +1156,7 @@ async function insertDeviceTypeAttributes(db, dtClusterRefDataPairs) { return dbApi.dbMultiInsert( db, 'INSERT INTO DEVICE_TYPE_ATTRIBUTE (DEVICE_TYPE_CLUSTER_REF, ATTRIBUTE_NAME) VALUES (?, ?)', - attributes + attributes, ) } @@ -1180,7 +1180,7 @@ async function insertDeviceTypeCommands(db, dtClusterRefDataPairs) { return dbApi.dbMultiInsert( db, 'INSERT INTO DEVICE_TYPE_COMMAND (DEVICE_TYPE_CLUSTER_REF, COMMAND_NAME) VALUES (?, ?)', - commands + commands, ) } @@ -1194,7 +1194,7 @@ INSERT INTO OPERATION VALUES (?, ?, ?) `, - data + data, ) } @@ -1208,7 +1208,7 @@ INSERT INTO ROLE VALUES (?, ?, ?, ?) `, - data + data, ) } @@ -1222,7 +1222,7 @@ INSERT INTO ACCESS_MODIFIER VALUES (?, ?, ?) `, - data + data, ) } @@ -1244,7 +1244,14 @@ VALUES ( (SELECT ACCESS_MODIFIER_ID FROM ACCESS_MODIFIER WHERE NAME = ? AND PACKAGE_REF = ?) ) `, - data.map((x) => [x.op, packageId, x.role, packageId, x.modifier, packageId]) + data.map((x) => [ + x.op, + packageId, + x.role, + packageId, + x.modifier, + packageId, + ]), ) } @@ -1260,7 +1267,7 @@ async function insertDefaultAccess(db, packageId, defaultAccess) { return dbApi.dbMultiInsert( db, `INSERT INTO DEFAULT_ACCESS ( PACKAGE_REF, ENTITY_TYPE, ACCESS_REF) VALUES (?, ?, ?)`, - ids.map((id) => [packageId, defaultAccess.type, id]) + ids.map((id) => [packageId, defaultAccess.type, id]), ) } @@ -1296,7 +1303,7 @@ WHERE ) = ? `, - [packageId, packageId] + [packageId, packageId], ) } @@ -1317,7 +1324,7 @@ async function insertDataTypeDiscriminator(db, packageId, data) { return dbApi.dbMultiInsert( db, 'INSERT OR IGNORE INTO DISCRIMINATOR (PACKAGE_REF, NAME) VALUES (?, ?)', - data.map((at) => [packageId, at.name]) + data.map((at) => [packageId, at.name]), ) } @@ -1335,7 +1342,12 @@ async function insertDataType(db, packageId, data) { const lastIdsArray = await dbApi.dbMultiInsert( db, 'INSERT INTO DATA_TYPE (PACKAGE_REF, NAME, DESCRIPTION, DISCRIMINATOR_REF) VALUES ( ?, ?, ?, ?)', - data.map((at) => [packageId, at.name, at.description, at.discriminator_ref]) + data.map((at) => [ + packageId, + at.name, + at.description, + at.discriminator_ref, + ]), ) let clustersToLoad = [] @@ -1351,7 +1363,7 @@ async function insertDataType(db, packageId, data) { return dbApi.dbMultiInsert( db, `INSERT INTO DATA_TYPE_CLUSTER (DATA_TYPE_REF, CLUSTER_CODE) VALUES (?, ?)`, - clustersToLoad + clustersToLoad, ) return lastIdsArray } @@ -1382,7 +1394,7 @@ VALUES ( at.discriminator_ref, at.size, at.is_signed, - ]) + ]), ) } @@ -1414,7 +1426,7 @@ VALUES ( at.is_long, at.size, at.is_char, - ]) + ]), ) } @@ -1437,7 +1449,7 @@ VALUES ( AND NAME = ? AND DISCRIMINATOR_REF = ?), ?)`, - data.map((at) => [packageId, at.name, at.discriminator_ref, at.size]) + data.map((at) => [packageId, at.name, at.discriminator_ref, at.size]), ) } @@ -1461,18 +1473,18 @@ VALUES ( CASE WHEN (${SELECT_CLUSTER_SPECIFIC_DATA_TYPE} AND PACKAGE_REF IN (${dbApi.toInClause( - packageIds - )})) + packageIds, + )})) IS NULL THEN (${SELECT_GENERIC_DATA_TYPE} AND PACKAGE_REF IN (${dbApi.toInClause( - packageIds - )})) + packageIds, + )})) ELSE (${SELECT_CLUSTER_SPECIFIC_DATA_TYPE} AND PACKAGE_REF IN (${dbApi.toInClause( - packageIds - )})) + packageIds, + )})) END AS DATA_TYPE_ID), (SELECT CASE @@ -1501,7 +1513,7 @@ VALUES ( ENUM.ENUM_ID = DATA_TYPE.DATA_TYPE_ID WHERE DATA_TYPE.PACKAGE_REF IN (${dbApi.toInClause( - packageIds + packageIds, )}) AND DATA_TYPE.NAME = ?) ELSE (SELECT @@ -1531,7 +1543,7 @@ VALUES ( at.type, at.type, at.discriminator_ref, - ]) + ]), ) } @@ -1634,7 +1646,7 @@ AND at.name, at.value, at.fieldIdentifier, - ]) + ]), ) } @@ -1660,7 +1672,7 @@ VALUES ( DATA_TYPE WHERE PACKAGE_REF = ? AND NAME = ? AND DISCRIMINATOR_REF = ?), ?)`, - data.map((at) => [packageId, at.name, at.discriminator_ref, at.size]) + data.map((at) => [packageId, at.name, at.discriminator_ref, at.size]), ) } @@ -1683,18 +1695,18 @@ async function insertBitmap(db, packageIds, data) { CASE WHEN (${SELECT_CLUSTER_SPECIFIC_DATA_TYPE} AND PACKAGE_REF IN (${dbApi.toInClause( - packageIds - )})) + packageIds, + )})) IS NULL THEN (${SELECT_GENERIC_DATA_TYPE} AND PACKAGE_REF IN (${dbApi.toInClause( - packageIds - )})) + packageIds, + )})) ELSE (${SELECT_CLUSTER_SPECIFIC_DATA_TYPE} AND PACKAGE_REF IN (${dbApi.toInClause( - packageIds - )})) + packageIds, + )})) END AS DATA_TYPE_ID), (SELECT CASE @@ -1752,7 +1764,7 @@ async function insertBitmap(db, packageIds, data) { at.type, at.type, at.discriminator_ref, - ]) + ]), ) } @@ -1859,7 +1871,7 @@ async function insertBitmapFields(db, packageId, knownPackages, data) { at.mask, at.fieldIdentifier, at.type, - ]) + ]), ) } @@ -1881,18 +1893,18 @@ VALUES ( CASE WHEN (${SELECT_CLUSTER_SPECIFIC_DATA_TYPE} AND PACKAGE_REF IN (${dbApi.toInClause( - packageIds - )})) + packageIds, + )})) IS NULL THEN (${SELECT_GENERIC_DATA_TYPE} AND PACKAGE_REF IN (${dbApi.toInClause( - packageIds - )})) + packageIds, + )})) ELSE (${SELECT_CLUSTER_SPECIFIC_DATA_TYPE} AND PACKAGE_REF IN (${dbApi.toInClause( - packageIds - )})) + packageIds, + )})) END AS DATA_TYPE_ID), (SELECT CASE @@ -1953,7 +1965,7 @@ VALUES ( at.discriminator_ref, dbApi.toDbBool(at.isFabricScoped), at.apiMaturity, - ]) + ]), ) } @@ -2081,7 +2093,7 @@ async function insertStructItems(db, packageIds, data) { at.isFabricSensitive, at.size, at.type, - ]) + ]), ) } diff --git a/src-electron/rest/user-data.js b/src-electron/rest/user-data.js index 62cd0c2d5a..38c457410a 100644 --- a/src-electron/rest/user-data.js +++ b/src-electron/rest/user-data.js @@ -50,7 +50,7 @@ function httpGetSessionKeyValues(db) { let sessionId = request.zapSessionId let sessionKeyValues = await querySession.getAllSessionKeyValues( db, - sessionId + sessionId, ) response.status(StatusCodes.OK).json(sessionKeyValues) } @@ -83,7 +83,7 @@ function httpGetSessionNotifications(db) { let sessionId = request.zapSessionId let notifications = await querySessionNotification.getNotification( db, - sessionId + sessionId, ) response.status(StatusCodes.OK).json(notifications) } @@ -171,7 +171,7 @@ function httpGetUnseenNotificationAndUpdate(db) { let unseenIds = request.query.unseenIds let resp = await querySessionNotification.markNotificationsAsSeen( db, - unseenIds + unseenIds, ) response.status(StatusCodes.OK).json(resp) } @@ -212,7 +212,7 @@ function httpPostCluster(db) { .getSessionPackagesByType( db, sessionId, - dbEnum.packageType.zclProperties + dbEnum.packageType.zclProperties, ) .then((pkgs) => pkgs?.shift()?.id) // default to always picking first package @@ -229,7 +229,7 @@ function httpPostCluster(db) { endpointTypeId, id, side, - flag + flag, ) if (insertDefault) { @@ -271,7 +271,7 @@ function httpPostForcedExternal(db) { let sessionId = request.zapSessionId let packages = await queryPackage.getPackageSessionPackagePairBySessionId( db, - sessionId + sessionId, ) let packageIds = packages.map((item) => item.pkg.id) let forcedExternal = await upgrade.getForcedExternalStorage(db, packageIds) @@ -330,9 +330,9 @@ function httpPostAttributeUpdate(db) { paramArray, reportMinInterval, reportMaxInterval, - reportableChange - ) - ) + reportableChange, + ), + ), ) // send latest value to frontend to update UI @@ -340,7 +340,7 @@ function httpPostAttributeUpdate(db) { db, endpointTypeIdList[0], id, - clusterRef + clusterRef, ) // only return 1 validation result. @@ -351,7 +351,7 @@ function httpPostAttributeUpdate(db) { endpointTypeIdList[0], id, clusterRef, - request.zapSessionId + request.zapSessionId, ) response.status(StatusCodes.OK).json({ @@ -406,9 +406,9 @@ function httpPostCommandUpdate(db) { commandSide, id, value, - isIncoming - ) - ) + isIncoming, + ), + ), ) response.status(StatusCodes.OK).json({ @@ -439,7 +439,7 @@ function httpPostEventUpdate(db) { clusterRef, eventSide, id, - value + value, ) response.status(StatusCodes.OK).json({ @@ -498,7 +498,7 @@ function httpGetOption(db) { let sessionId = request.zapSessionId let packages = await queryPackage.getSessionPackages(db, sessionId) let p = packages.map((pkg) => - queryPackage.selectAllOptionsValues(db, pkg.packageRef, category) + queryPackage.selectAllOptionsValues(db, pkg.packageRef, category), ) let data = await Promise.all(p) data = data.flat(1) @@ -566,24 +566,24 @@ function httpPostAddNewPackage(db) { await querySession.selectSessionPartitionInfoFromPackageId( db, sessionId, - data.packageId + data.packageId, ) if (sessionPartitionInfoForNewPackage.length == 0) { let sessionPartitionInfo = await querySession.getAllSessionPartitionInfoForSession( db, - sessionId + sessionId, ) let sessionPartitionId = await querySession.insertSessionPartition( db, sessionId, - sessionPartitionInfo.length + 1 + sessionPartitionInfo.length + 1, ) await queryPackage.insertSessionPackage( db, sessionPartitionId, data.packageId, - true + true, ) } status = { @@ -619,7 +619,7 @@ function httpPostShareClusterStatesAcrossEndpoints(db) { let packageIds = await queryPackage.getSessionPackagesByType( db, sessionId, - dbEnum.packageType.zclProperties + dbEnum.packageType.zclProperties, ) packageIds = packageIds.map(function getId(item) { return item.id @@ -634,7 +634,7 @@ function httpPostShareClusterStatesAcrossEndpoints(db) { db, endpointTypeIdList.map((id) => { return { endpointTypeId: id } - }) + }), ) .then((list) => list.filter((entry) => entry.endpointCount > 1)) @@ -642,7 +642,7 @@ function httpPostShareClusterStatesAcrossEndpoints(db) { db, endpointTypeIdList, sharedClusterList, - packageIds + packageIds, ) await writeAttributeDefaults(db, attrDefaults) @@ -650,7 +650,7 @@ function httpPostShareClusterStatesAcrossEndpoints(db) { db, endpointTypeIdList, sharedClusterList, - packageIds + packageIds, ) await writeCommandDefaults(db, cmdDefaults) @@ -665,7 +665,7 @@ async function commandDefaults( db, endpointTypeIdList, sharedClusterList, - packageIds + packageIds, ) { let sharedCmdDefaults = {} let clusCmdToCmdObj = {} @@ -675,7 +675,7 @@ async function commandDefaults( sharedClusterList.map((c) => { return { endpointTypeClusterRef: c.endpointClusterId } }), - packageIds + packageIds, ) for (const endpointTypeId of endpointTypeIdList) { @@ -698,7 +698,7 @@ async function commandDefaults( let cmds = await queryEndpoint.selectEndpointClusterCommands( db, sharedCmd.clusterId, - endpointTypeId + endpointTypeId, ) // find attr @@ -727,8 +727,8 @@ async function writeCommandDefaults(db, defaults) { cmd.source, cmd.id, cmd.isIncoming, - true - ) + true, + ), ) promises.push( @@ -739,8 +739,8 @@ async function writeCommandDefaults(db, defaults) { cmd.source, cmd.id, cmd.isOutgoing, - false - ) + false, + ), ) } } @@ -751,7 +751,7 @@ async function attributeDefaults( db, endpointTypeIdList, sharedClusterList, - packageIds + packageIds, ) { let sharedAttributeDefaults = {} let clusterIdnSideToAttrCache = {} @@ -759,7 +759,7 @@ async function attributeDefaults( await queryAttribute.selectAttributeDetailsFromEnabledClusters( db, sharedClusterList, - packageIds + packageIds, ) for (const endpointTypeId of endpointTypeIdList) { @@ -779,19 +779,19 @@ async function attributeDefaults( !(endpointTypeId in sharedAttributeDefaults) && (sharedAttributeDefaults[endpointTypeId] = []) sharedAttributeDefaults[endpointTypeId].push( - clusterIdnSideToAttrCache[clusAttrCacheKey] + clusterIdnSideToAttrCache[clusAttrCacheKey], ) } else { let attributes = await queryEndpoint.selectEndpointClusterAttributes( db, sharedAttr.clusterId, sharedAttr.side, - endpointTypeId + endpointTypeId, ) // find attr let matched = attributes.filter((attr) => - attributeEquals(attr, sharedAttr) + attributeEquals(attr, sharedAttr), ) if (matched.length) { let m = matched.shift() @@ -843,8 +843,8 @@ async function writeAttributeDefaults(db, defaults) { ], attr.min, attr.max, - attr.reportableChange - ) + attr.reportableChange, + ), ) } } @@ -881,12 +881,12 @@ function httpDeleteSessionPackage(db) { await querySession.selectSessionPartitionInfoFromPackageId( db, sessionRef, - packageRef + packageRef, ) let removed = await queryPackage.deleteSessionPackage( db, sessionPartitionInfo[0].sessionPartitionId, - packageRef + packageRef, ) response.status(StatusCodes.OK).json({ @@ -912,7 +912,7 @@ function httpPostDuplicateEndpoint(db) { db, endpointId, endpointIdentifier, - endpointTypeId + endpointTypeId, ) res.status(StatusCodes.OK).json({ id: id }) } @@ -947,11 +947,11 @@ function httpPostDuplicateEndpointType(db) { async function duplicateEndpointTypeClusters( db, oldEndpointTypeId, - newEndpointTypeId + newEndpointTypeId, ) { let oldEndpointTypeClusters = await queryConfig.selectEndpointClusters( db, - oldEndpointTypeId + oldEndpointTypeId, ) oldEndpointTypeClusters.forEach(async (endpointTypeCluster) => { let newEndpointTypeClusterId = @@ -960,19 +960,19 @@ async function duplicateEndpointTypeClusters( newEndpointTypeId, endpointTypeCluster.clusterRef, endpointTypeCluster.side, - endpointTypeCluster.enabled + endpointTypeCluster.enabled, ) let oldAttributes = await queryAttribute.selectEndpointTypeAttributesByEndpointTypeRefAndClusterRef( db, oldEndpointTypeId, - endpointTypeCluster.endpointTypeClusterId + endpointTypeCluster.endpointTypeClusterId, ) oldAttributes.forEach(async (attrubute) => { await queryAttribute.duplicateEndpointTypeAttribute( db, newEndpointTypeClusterId, - attrubute + attrubute, ) }) }) diff --git a/src-electron/zcl/zcl-loader-silabs.js b/src-electron/zcl/zcl-loader-silabs.js index de8c93a2bd..3b2b50f67f 100644 --- a/src-electron/zcl/zcl-loader-silabs.js +++ b/src-electron/zcl/zcl-loader-silabs.js @@ -49,7 +49,7 @@ async function collectDataFromJsonFile(metadataFile, data) { let fileLocations if (Array.isArray(obj.xmlRoot)) { fileLocations = obj.xmlRoot.map((p) => - path.join(path.dirname(metadataFile), p) + path.join(path.dirname(metadataFile), p), ) } else { fileLocations = [path.join(path.dirname(metadataFile), obj.xmlRoot)] @@ -107,7 +107,7 @@ async function collectDataFromJsonFile(metadataFile, data) { // If it's missing, 'optional' is a default reporting policy. if ('defaultReportingPolicy' in obj) { returnObject.defaultReportingPolicy = dbEnum.reportingPolicy.resolve( - obj.defaultReportingPolicy + obj.defaultReportingPolicy, ) } returnObject.version = obj.version @@ -170,14 +170,14 @@ async function collectDataFromJsonFile(metadataFile, data) { if ('newXmlFile' in obj) { returnObject.newXmlFile = obj.newXmlFile.map((f) => - path.join(path.dirname(metadataFile), f) + path.join(path.dirname(metadataFile), f), ) } else { returnObject.newXmlFile = [] } env.logDebug( - `Resolving: ${returnObject.zclFiles}, version: ${returnObject.version}` + `Resolving: ${returnObject.zclFiles}, version: ${returnObject.version}`, ) return returnObject @@ -211,7 +211,7 @@ async function collectDataFromPropertiesFile(metadataFile, data) { zclProps.xmlFile.split(',').forEach((singleXmlFile) => { let fullPath = util.locateRelativeFilePath( fileLocations, - singleXmlFile + singleXmlFile, ) if (fullPath != null) zclFiles.push(fullPath) }) @@ -220,7 +220,7 @@ async function collectDataFromPropertiesFile(metadataFile, data) { // Manufacturers XML file. f = util.locateRelativeFilePath( fileLocations, - zclProps.manufacturersXml + zclProps.manufacturersXml, ) if (f != null) returnObject.manufacturersXml = f @@ -257,7 +257,7 @@ async function collectDataFromPropertiesFile(metadataFile, data) { automaticallyCreateFields: false, } env.logDebug( - `Resolving: ${returnObject.zclFiles}, version: ${returnObject.version}` + `Resolving: ${returnObject.zclFiles}, version: ${returnObject.version}`, ) resolve(returnObject) } @@ -319,7 +319,7 @@ async function processAtomics(db, filePath, packageId, data) { return queryLoader.insertAtomics( db, packageId, - types.map((x) => prepareAtomic(x)) + types.map((x) => prepareAtomic(x)), ) } @@ -359,10 +359,10 @@ function prepareClusterGlobalAttribute(cluster) { if (ga.$.side == dbEnum.side.either) { ret.globalAttribute.push( - Object.assign({ side: dbEnum.side.client }, at) + Object.assign({ side: dbEnum.side.client }, at), ) ret.globalAttribute.push( - Object.assign({ side: dbEnum.side.server }, at) + Object.assign({ side: dbEnum.side.server }, at), ) } else { ret.globalAttribute.push(Object.assign({ side: ga.$.side }, at)) @@ -576,7 +576,7 @@ function prepareCluster(cluster, context, isExtension = false) { reportingPolicy = dbEnum.reportingPolicy.optional } else if (attribute.$.reportingPolicy != null) { reportingPolicy = dbEnum.reportingPolicy.resolve( - attribute.$.reportingPolicy + attribute.$.reportingPolicy, ) } let storagePolicy = dbEnum.storagePolicy.any @@ -648,7 +648,7 @@ function prepareCluster(cluster, context, isExtension = false) { att.name + ' in xml. \ Currently defaulting to a max length of 253 for long strings instead of 65534 \ - for space conservation and no support available for long strings in zigbee pro.' + for space conservation and no support available for long strings in zigbee pro.', ) att.maxLength = 253 } else { @@ -659,7 +659,7 @@ function prepareCluster(cluster, context, isExtension = false) { att.name + ' in xml. \ Currently defaulting to a max length of 1024 for long strings instead of 65534 \ - for space conservation.' + for space conservation.', ) att.maxLength = 1024 } @@ -717,7 +717,7 @@ async function processClusters(db, filePath, packageId, data, context) { context.clustersLoadedFromNewFiles.includes(cluster.code) ) { env.logDebug( - `Bypassing loading of cluster ${cluster.code} from old files.` + `Bypassing loading of cluster ${cluster.code} from old files.`, ) return false } else { @@ -767,16 +767,16 @@ async function processClusterExtensions( dataPackageId, knownPackages, data, - context + context, ) { env.logDebug( - `${filePath}, ${dataPackageId}: ${data.length} cluster extensions.` + `${filePath}, ${dataPackageId}: ${data.length} cluster extensions.`, ) return queryLoader.insertClusterExtensions( db, dataPackageId, knownPackages, - data.map((x) => prepareCluster(x, context, true)) + data.map((x) => prepareCluster(x, context, true)), ) } @@ -795,7 +795,7 @@ async function processGlobals(db, filePath, packageId, data, context) { return queryLoader.insertGlobals( db, packageId, - data.map((x) => prepareCluster(x, context, true)) + data.map((x) => prepareCluster(x, context, true)), ) } @@ -817,7 +817,7 @@ async function processDefaultAccess( db, filePath, packageId, - defaultAccessList + defaultAccessList, ) { let p = [] for (const da of defaultAccessList) { @@ -844,7 +844,7 @@ async function processAccessControl( db, filePath, packageId, - accessControlList + accessControlList, ) { let operations = [] let roles = [] @@ -987,7 +987,7 @@ async function processDataTypeDiscriminator(db, packageId, zclDataTypes) { return queryLoader.insertDataTypeDiscriminator( db, packageId, - types.map((x) => prepareDataTypeDiscriminator(x)) + types.map((x) => prepareDataTypeDiscriminator(x)), ) } @@ -1030,8 +1030,8 @@ function prepareDataType(a, dataType, typeMap) { cluster_code: a.cluster ? a.cluster : a.$.cluster_code - ? [{ $: { code: a.$.cluster_code[0] } }] - : null, // else case: Treating features in a cluster as a bitmap + ? [{ $: { code: a.$.cluster_code[0] } }] + : null, // else case: Treating features in a cluster as a bitmap } } @@ -1052,7 +1052,7 @@ async function processDataType( packageId, knownPackages, data, - dataType + dataType, ) { let typeMap = await zclLoader.getDiscriminatorMap(db, knownPackages) @@ -1062,7 +1062,7 @@ async function processDataType( return queryLoader.insertDataType( db, packageId, - types.map((x) => prepareDataType(x, 0, typeMap)) + types.map((x) => prepareDataType(x, 0, typeMap)), ) } else if (dataType == dbEnum.zclType.enum) { env.logDebug(`${filePath}, ${packageId}: ${data.length} Enum Data Types.`) @@ -1070,8 +1070,8 @@ async function processDataType( db, packageId, data.map((x) => - prepareDataType(x, typeMap.get(dbEnum.zclType.enum), typeMap) - ) + prepareDataType(x, typeMap.get(dbEnum.zclType.enum), typeMap), + ), ) } else if (dataType == dbEnum.zclType.bitmap) { env.logDebug(`${filePath}, ${packageId}: ${data.length} Bitmap Data Types.`) @@ -1079,8 +1079,8 @@ async function processDataType( db, packageId, data.map((x) => - prepareDataType(x, typeMap.get(dbEnum.zclType.bitmap), typeMap) - ) + prepareDataType(x, typeMap.get(dbEnum.zclType.bitmap), typeMap), + ), ) } else if (dataType == dbEnum.zclType.struct) { env.logDebug(`${filePath}, ${packageId}: ${data.length} Struct Data Types.`) @@ -1088,8 +1088,8 @@ async function processDataType( db, packageId, data.map((x) => - prepareDataType(x, typeMap.get(dbEnum.zclType.struct), typeMap) - ) + prepareDataType(x, typeMap.get(dbEnum.zclType.struct), typeMap), + ), ) } else if (dataType == dbEnum.zclType.string) { env.logDebug(`${filePath}, ${packageId}: ${data.length} String Data Types.`) @@ -1097,19 +1097,19 @@ async function processDataType( db, packageId, data.map((x) => - prepareDataType(x, typeMap.get(dbEnum.zclType.string), typeMap) - ) + prepareDataType(x, typeMap.get(dbEnum.zclType.string), typeMap), + ), ) } else { env.logError( - 'Could not find the discriminator for the data type: ' + dataType + 'Could not find the discriminator for the data type: ' + dataType, ) queryPackageNotification.setNotification( dnb, 'ERROR', 'Could not find the discriminator for the data type: ' + dataType, packageId, - 1 + 1, ) } } @@ -1138,8 +1138,8 @@ function prepareNumber(a, dataType) { ? 1 : 0 : isSignedException || /^int[0-9]{1,2}s?$/.test(a.$.name) - ? 1 - : 0, + ? 1 + : 0, name: a.$.name, cluster_code: a.cluster ? a.cluster : null, discriminator_ref: dataType, @@ -1170,7 +1170,7 @@ async function processNumber(db, filePath, packageId, knownPackages, data) { return queryLoader.insertNumber( db, packageId, - numbers.map((x) => prepareNumber(x, typeMap.get(dbEnum.zclType.number))) + numbers.map((x) => prepareNumber(x, typeMap.get(dbEnum.zclType.number))), ) } @@ -1214,7 +1214,7 @@ async function processString(db, filePath, packageId, knownPackages, data) { return queryLoader.insertString( db, packageId, - strings.map((x) => prepareString(x, typeMap.get(dbEnum.zclType.string))) + strings.map((x) => prepareString(x, typeMap.get(dbEnum.zclType.string))), ) } @@ -1254,8 +1254,8 @@ async function processEnumAtomic(db, filePath, packageId, knownPackages, data) { db, packageId, enums.map((x) => - prepareEnumOrBitmapAtomic(x, typeMap.get(dbEnum.zclType.enum)) - ) + prepareEnumOrBitmapAtomic(x, typeMap.get(dbEnum.zclType.enum)), + ), ) } @@ -1286,7 +1286,7 @@ function prepareEnumOrBitmap(db, packageId, a, dataType, typeMap) { 'WARNING', message, packageId, - 2 + 2, ) a.$.type = 'enum' + a.$.type.toLowerCase().match(/\d+/g).join('') } @@ -1296,8 +1296,8 @@ function prepareEnumOrBitmap(db, packageId, a, dataType, typeMap) { cluster_code: a.cluster ? a.cluster : a.$.cluster_code - ? [{ $: { code: a.$.cluster_code[0] } }] - : null, // else case: Treating features in a cluster as a bitmap + ? [{ $: { code: a.$.cluster_code[0] } }] + : null, // else case: Treating features in a cluster as a bitmap discriminator_ref: dataType, } } @@ -1324,9 +1324,9 @@ async function processEnum(db, filePath, packageId, knownPackages, data) { packageId, x, typeMap.get(dbEnum.zclType.enum), - typeMap - ) - ) + typeMap, + ), + ), ) } @@ -1377,21 +1377,21 @@ async function processBitmapAtomic( filePath, packageId, knownPackages, - data + data, ) { let typeMap = await zclLoader.getDiscriminatorMap(db, knownPackages) let bitmaps = data[0].type.filter(function (item) { return item.$.name.toLowerCase().includes(dbEnum.zclType.bitmap) }) env.logDebug( - `${filePath}, ${packageId}: ${data.length} Baseline Bitmap Types.` + `${filePath}, ${packageId}: ${data.length} Baseline Bitmap Types.`, ) return queryLoader.insertBitmapAtomic( db, packageId, bitmaps.map((x) => - prepareEnumOrBitmapAtomic(x, typeMap.get(dbEnum.zclType.bitmap)) - ) + prepareEnumOrBitmapAtomic(x, typeMap.get(dbEnum.zclType.bitmap)), + ), ) } @@ -1417,9 +1417,9 @@ async function processBitmap(db, filePath, packageId, knownPackages, data) { packageId, x, typeMap.get(dbEnum.zclType.bitmap), - typeMap - ) - ) + typeMap, + ), + ), ) } @@ -1438,7 +1438,7 @@ async function processBitmapFields( filePath, packageId, knownPackages, - data + data, ) { env.logDebug(`${filePath}, ${packageId}: ${data.length} Bitmap Fields.`) let bitmapFields = [] @@ -1481,7 +1481,7 @@ async function processBitmapFields( db, packageId, knownPackages, - bitmapFields + bitmapFields, ) } @@ -1518,7 +1518,7 @@ async function processStruct(db, filePath, packageId, knownPackages, data) { return queryLoader.insertStruct( db, knownPackages, - data.map((x) => prepareStruct(x, typeMap.get(dbEnum.zclType.struct))) + data.map((x) => prepareStruct(x, typeMap.get(dbEnum.zclType.struct))), ) } @@ -1692,7 +1692,7 @@ async function processDeviceTypes(db, filePath, packageId, data, context) { await queryLoader.insertDeviceComposition( db, deviceType, - endpointCompositionId + endpointCompositionId, ) } } @@ -1712,7 +1712,7 @@ async function processParsedZclData( db, argument, previouslyKnownPackages, - context + context, ) { let filePath = argument.filePath let data = argument.result @@ -1744,7 +1744,7 @@ async function processParsedZclData( let batch1 = [] if ('accessControl' in toplevel) { batch1.push( - processAccessControl(db, filePath, packageId, toplevel.accessControl) + processAccessControl(db, filePath, packageId, toplevel.accessControl), ) } if ('tag' in toplevel) { @@ -1764,19 +1764,19 @@ async function processParsedZclData( filePath, packageId, toplevel.deviceType, - context - ) + context, + ), ) } if ('global' in toplevel) { batch2.push( - processGlobals(db, filePath, packageId, toplevel.global, context) + processGlobals(db, filePath, packageId, toplevel.global, context), ) } if ('cluster' in toplevel) { featureClusters = toplevel.cluster.filter((c) => 'features' in c) batch2.push( - processClusters(db, filePath, packageId, toplevel.cluster, context) + processClusters(db, filePath, packageId, toplevel.cluster, context), ) } await Promise.all(batch2) @@ -1790,8 +1790,8 @@ async function processParsedZclData( packageId, knownPackages, toplevel.atomic, - dbEnum.zclType.atomic - ) + dbEnum.zclType.atomic, + ), ) } @@ -1803,8 +1803,8 @@ async function processParsedZclData( packageId, knownPackages, toplevel.bitmap, - dbEnum.zclType.bitmap - ) + dbEnum.zclType.bitmap, + ), ) } @@ -1826,8 +1826,8 @@ async function processParsedZclData( }, }, ], - dbEnum.zclType.bitmap - ) + dbEnum.zclType.bitmap, + ), ) }) } @@ -1840,8 +1840,8 @@ async function processParsedZclData( packageId, knownPackages, toplevel.enum, - dbEnum.zclType.enum - ) + dbEnum.zclType.enum, + ), ) } if (dbEnum.zclType.struct in toplevel) { @@ -1852,8 +1852,8 @@ async function processParsedZclData( packageId, knownPackages, toplevel.struct, - dbEnum.zclType.struct - ) + dbEnum.zclType.struct, + ), ) } await Promise.all(batch3) @@ -1863,10 +1863,10 @@ async function processParsedZclData( let Batch4 = [] if (dbEnum.zclType.atomic in toplevel) { Batch4.push( - processNumber(db, filePath, packageId, knownPackages, toplevel.atomic) + processNumber(db, filePath, packageId, knownPackages, toplevel.atomic), ) Batch4.push( - processString(db, filePath, packageId, knownPackages, toplevel.atomic) + processString(db, filePath, packageId, knownPackages, toplevel.atomic), ) Batch4.push( processEnumAtomic( @@ -1874,8 +1874,8 @@ async function processParsedZclData( filePath, packageId, knownPackages, - toplevel.atomic - ) + toplevel.atomic, + ), ) Batch4.push( processBitmapAtomic( @@ -1883,8 +1883,8 @@ async function processParsedZclData( filePath, packageId, knownPackages, - toplevel.atomic - ) + toplevel.atomic, + ), ) } await Promise.all(Batch4) @@ -1892,12 +1892,12 @@ async function processParsedZclData( let Batch5 = [] if (dbEnum.zclType.enum in toplevel) { Batch5.push( - processEnum(db, filePath, packageId, knownPackages, toplevel.enum) + processEnum(db, filePath, packageId, knownPackages, toplevel.enum), ) } if (dbEnum.zclType.bitmap in toplevel) { Batch5.push( - processBitmap(db, filePath, packageId, knownPackages, toplevel.bitmap) + processBitmap(db, filePath, packageId, knownPackages, toplevel.bitmap), ) } // Treating features in a cluster as a bitmap @@ -1912,13 +1912,13 @@ async function processParsedZclData( cluster_code: [fc.code[0]], }, }, - ]) + ]), ) }) } if (dbEnum.zclType.struct in toplevel) { Batch5.push( - processStruct(db, filePath, packageId, knownPackages, toplevel.struct) + processStruct(db, filePath, packageId, knownPackages, toplevel.struct), ) } await Promise.all(Batch5) @@ -1927,7 +1927,7 @@ async function processParsedZclData( let batch6 = [] if (dbEnum.zclType.enum in toplevel) { batch6.push( - processEnumItems(db, filePath, packageId, knownPackages, toplevel.enum) + processEnumItems(db, filePath, packageId, knownPackages, toplevel.enum), ) } if (dbEnum.zclType.bitmap in toplevel) { @@ -1937,15 +1937,15 @@ async function processParsedZclData( filePath, packageId, knownPackages, - toplevel.bitmap - ) + toplevel.bitmap, + ), ) } // Treating features in a cluster as a bitmap if (featureClusters.length > 0) { featureClusters.forEach((fc) => { batch6.push( - processBitmapFields(db, filePath, packageId, knownPackages, fc) + processBitmapFields(db, filePath, packageId, knownPackages, fc), ) }) } @@ -1956,8 +1956,8 @@ async function processParsedZclData( filePath, knownPackages, toplevel.struct, - context - ) + context, + ), ) } await Promise.all(batch6) @@ -1966,7 +1966,7 @@ async function processParsedZclData( let Batch7 = [] if ('defaultAccess' in toplevel) { Batch7.push( - processDefaultAccess(db, filePath, packageId, toplevel.defaultAccess) + processDefaultAccess(db, filePath, packageId, toplevel.defaultAccess), ) } if ('atomic' in toplevel) { @@ -1986,8 +1986,8 @@ async function processParsedZclData( db, filePath, packageId, - toplevel.cluster - ) + toplevel.cluster, + ), ) } if ('clusterExtension' in toplevel) { @@ -1998,8 +1998,8 @@ async function processParsedZclData( packageId, knownPackages, toplevel.clusterExtension, - context - ) + context, + ), ) } return Promise.all(delayedPromises) @@ -2027,7 +2027,7 @@ async function parseSingleZclFile(db, packageId, file, context) { data, packageId, dbEnum.packageType.zclXml, - false + false, ) if (result.data) { result.result = await util.parseXml(fileContent) @@ -2063,13 +2063,13 @@ async function isCrcMismatchOrPackageDoesNotExist(db, packageId, files) { db, filePath, packageId, - false + false, ) if (pkg != null && pkg.crc != actualCrc) { env.logDebug( `CRC missmatch for file ${pkg.path}, (${pkg.crc} vs ${actualCrc}) package id ${pkg.id}, parsing. - Mismatch with package id: ${packageId}` + Mismatch with package id: ${packageId}`, ) result.isCrcMismatch = true return result @@ -2077,7 +2077,7 @@ async function isCrcMismatchOrPackageDoesNotExist(db, packageId, files) { // This is executed if there is no CRC in the database. packagesNotFound++ env.logDebug( - `No CRC in the database for file ${filePath}. Package needs to be loaded` + `No CRC in the database for file ${filePath}. Package needs to be loaded`, ) } else if (pkg != null && pkg.crc == actualCrc) { packagesFound++ @@ -2110,14 +2110,14 @@ async function parseZclFiles(db, packageId, zclFiles, context) { // referenced by other types let typesFiles = zclFiles.filter((file) => file.includes('types.xml')) let typeFilePromise = typesFiles.map((file) => - parseSingleZclFile(db, packageId, file, context) + parseSingleZclFile(db, packageId, file, context), ) await Promise.all(typeFilePromise) // Load everything apart from atomic data types let nonTypesFiles = zclFiles.filter((file) => !file.includes('types.xml')) let individualFilePromise = nonTypesFiles.map((file) => - parseSingleZclFile(db, packageId, file, context) + parseSingleZclFile(db, packageId, file, context), ) let individualResults = await Promise.all(individualFilePromise) let laterPromises = individualResults.flat(2) @@ -2146,7 +2146,7 @@ async function parseManufacturerData(db, packageId, manufacturersXml) { manufacturerMap.map.mapping.map((datum) => { let mfgPair = datum['$'] return { code: mfgPair['code'], label: mfgPair['translation'] } - }) + }), ) } @@ -2169,7 +2169,7 @@ async function parseProfilesData(db, packageId, profilesXml) { profilesMap.map.mapping.map((datum) => { let profilePair = datum['$'] return { code: profilePair['code'], label: profilePair['translation'] } - }) + }), ) } @@ -2196,9 +2196,9 @@ async function parseFeatureFlags(db, packageId, featureFlags) { code: data, label: featureFlags[featureCategory][data] == '1' ? true : false, } - }) + }), ) - }) + }), ) } @@ -2225,7 +2225,7 @@ async function parseUiOptions(db, packageId, uiOptions) { db, packageId, dbEnum.packageOptionCategory.ui, - data + data, ) } /** @@ -2265,7 +2265,7 @@ async function parseTextOptions(db, pkgRef, textOptions) { optionKey, optionValues.map((optionValue) => { return { code: optionValue.toLowerCase(), label: optionValue } - }) + }), ) }) return Promise.all(promises) @@ -2295,7 +2295,7 @@ async function parseBoolOptions(db, pkgRef, booleanCategories) { queryPackage.insertOptionsKeyValues(db, pkgRef, optionCategory, [ { code: 1, label: 'True' }, { code: 0, label: 'False' }, - ]) + ]), ) }) return Promise.all(promises) @@ -2320,7 +2320,7 @@ async function parseBoolOptions(db, pkgRef, booleanCategories) { async function parseattributeAccessInterfaceAttributes( db, pkgRef, - attributeAccessInterfaceAttributes + attributeAccessInterfaceAttributes, ) { const clusters = Object.keys(attributeAccessInterfaceAttributes) for (let i = 0; i < clusters.length; i++) { @@ -2337,7 +2337,7 @@ async function parseattributeAccessInterfaceAttributes( db, pkgRef, cluster, - optionsKeyValues + optionsKeyValues, ) } catch (error) { console.error(`Error inserting attributes for cluster ${cluster}:`, error) @@ -2377,7 +2377,7 @@ async function parseTextDefaults(db, pkgRef, textDefaults) { db, pkgRef, optionCategory, - hex + hex, ) } else { return specificValue @@ -2387,17 +2387,17 @@ async function parseTextDefaults(db, pkgRef, textDefaults) { if (specificValue == null) { env.logWarning( 'Default value for: ${optionCategory}/${txt} does not match an option for packageId: ' + - pkgRef + pkgRef, ) } else { return queryPackage.insertDefaultOptionValue( db, pkgRef, optionCategory, - specificValue.id + specificValue.id, ) } - }) + }), ) } return Promise.all(promises) @@ -2414,16 +2414,16 @@ async function parseBoolDefaults(db, pkgRef, booleanCategories) { db, pkgRef, optionCategory, - booleanCategories[optionCategory] ? 1 : 0 + booleanCategories[optionCategory] ? 1 : 0, ) .then((specificValue) => queryPackage.insertDefaultOptionValue( db, pkgRef, optionCategory, - specificValue.id - ) - ) + specificValue.id, + ), + ), ) } return Promise.all(promises) @@ -2453,7 +2453,7 @@ async function loadIndividualSilabsFile(db, filePath, sessionId) { data, null, dbEnum.packageType.zclXmlStandalone, - true + true, ) let pkgId = result.packageId if (result.data) { @@ -2477,14 +2477,14 @@ async function loadIndividualSilabsFile(db, filePath, sessionId) { !result.result.configurator.clusterExtension ) { env.logDebug( - `CRC match for file ${result.filePath} (${result.crc}), skipping parsing.` + `CRC match for file ${result.filePath} (${result.crc}), skipping parsing.`, ) delete result.result } } let sessionPackages = await queryPackage.getSessionZclPackages( db, - sessionId + sessionId, ) let packageSet = new Set() sessionPackages.map((sessionPackage) => { @@ -2495,14 +2495,14 @@ async function loadIndividualSilabsFile(db, filePath, sessionId) { await Promise.all( laterPromises.flat(1).map((promise) => { if (promise != null && promise != undefined) return promise() - }) + }), ) // Check if session partition for package exists. If not then add it. let sessionPartitionInfoForNewPackage = await querySession.selectSessionPartitionInfoFromPackageId( db, sessionId, - pkgId + pkgId, ) if (sessionPartitionInfoForNewPackage.length == 0) { let sessionPartitionInfo = @@ -2510,13 +2510,13 @@ async function loadIndividualSilabsFile(db, filePath, sessionId) { let sessionPartitionId = await querySession.insertSessionPartition( db, sessionId, - sessionPartitionInfo.length + 1 + sessionPartitionInfo.length + 1, ) await queryPackage.insertSessionPackage( db, sessionPartitionId, pkgId, - true + true, ) } await zclLoader.processZclPostLoading(db, pkgId) @@ -2529,7 +2529,7 @@ async function loadIndividualSilabsFile(db, filePath, sessionId) { `Error reading xml file: ${filePath}, Error Message: ` + err.message, sessionId, 1, - 0 + 0, ) return { succeeded: false, err: err } } @@ -2556,7 +2556,7 @@ async function processCustomZclDeviceType(db, packageId) { db, packageId, dbEnum.customDevice.code, - dbEnum.customDevice.name + dbEnum.customDevice.name, ) if (existingCustomDevice == null) await queryLoader.insertDeviceTypes(db, packageId, customDeviceTypes) @@ -2605,12 +2605,12 @@ async function loadZclJsonOrProperties(db, metafile, isJson = false) { db, ctx.metadataFile, ctx.crc, - true + true, ) let packageStatus = await isCrcMismatchOrPackageDoesNotExist( db, ctx.packageId, - ctx.zclFiles + ctx.zclFiles, ) if (packageStatus.isCrcMismatch || packageStatus.areSomePackagesNotLoaded) { await queryPackage.updatePackageIsInSync(db, ctx.packageId, 0) @@ -2618,7 +2618,7 @@ async function loadZclJsonOrProperties(db, metafile, isJson = false) { db, ctx.metadataFile, ctx.crc, - false + false, ) } @@ -2632,7 +2632,7 @@ async function loadZclJsonOrProperties(db, metafile, isJson = false) { ctx.packageId, ctx.version, ctx.category, - ctx.description + ctx.description, ) } @@ -2641,7 +2641,7 @@ async function loadZclJsonOrProperties(db, metafile, isJson = false) { let newFileResult = await newDataModel.parseNewXmlFiles( db, ctx.packageId, - ctx.newXmlFile + ctx.newXmlFile, ) ctx.clustersLoadedFromNewFiles = newFileResult.clusterIdsLoaded ctx.newFileErrors = newFileResult.errorFiles @@ -2651,31 +2651,31 @@ async function loadZclJsonOrProperties(db, metafile, isJson = false) { if (ctx.attributeAccessInterfaceAttributes) { let all_known_clusters = await queryZcl.selectAllClusters( db, - ctx.packageId + ctx.packageId, ) for (let clusterName of Object.keys( - ctx.attributeAccessInterfaceAttributes + ctx.attributeAccessInterfaceAttributes, )) { let known_cluster = all_known_clusters.find( - (c) => c.name == clusterName + (c) => c.name == clusterName, ) if (!known_cluster) { throw new Error( - `\n\nUnknown cluster "${clusterName}" in attributeAccessInterfaceAttributes\n\n` + `\n\nUnknown cluster "${clusterName}" in attributeAccessInterfaceAttributes\n\n`, ) } let known_cluster_attributes = await queryZcl.selectAttributesByClusterIdIncludingGlobal( db, known_cluster.id, - ctx.packageId + ctx.packageId, ) for (let attrName of ctx.attributeAccessInterfaceAttributes[ clusterName ]) { if (!known_cluster_attributes.find((a) => a.name == attrName)) { throw new Error( - `\n\nUnknown attribute "${attrName}" in attributeAccessInterfaceAttributes["${clusterName}"]\n\n` + `\n\nUnknown attribute "${attrName}" in attributeAccessInterfaceAttributes["${clusterName}"]\n\n`, ) } } @@ -2701,7 +2701,7 @@ async function loadZclJsonOrProperties(db, metafile, isJson = false) { await parseattributeAccessInterfaceAttributes( db, ctx.packageId, - ctx.attributeAccessInterfaceAttributes + ctx.attributeAccessInterfaceAttributes, ) } if (ctx.featureFlags) {