motor-control-sdk/source/.meta/common.syscfg.js

359 lines
9.8 KiB
JavaScript
Raw Normal View History

function getSelfSysCfgCoreName() {
if(system.deviceData.core)
return system.deviceData.core.name;
/* when system.deviceData.core is not defined return a valid core for current SoC */
switch(getSocName()) {
case "am243x":
return "r5fss0-0";
default:
case "am64x":
return "r5fss0-0";
case "am263x":
return "r5fss0-0";
case "am273x":
return "r5fss0-0";
case "awr294x":
return "r5fss0-0";
case "am62x":
return "m4fss0-0";
}
};
function isSciClientSupported() {
switch(getSocName()) {
case "am243x":
return true;
case "am64x":
return true;
case "am62x":
return true;
default:
return false;
}
};
function getNodePath() {
return system.getNodePath()
}
function getSocName() {
if(system.deviceData.device == "AM64x_beta")
return "am64x";
if((system.deviceData.device == "AM243x_ALV_beta") || (system.deviceData.device == "AM243x_ALX_beta"))
return "am243x";
if(system.deviceData.device == "AM263x_beta")
return "am263x";
if(system.deviceData.device == "AM273x")
return "am273x";
if((system.deviceData.device == "AWR294X") || (system.deviceData.device == "AWR294XLOP"))
return "awr294x";
if(system.deviceData.device == "AM62x")
return "am62x";
};
function getDeviceName() {
if(system.deviceData.device == "AM64x_beta")
return "am64x-evm";
if(system.deviceData.device == "AM243x_ALV_beta")
return "am243x-evm";
if(system.deviceData.device == "AM243x_ALX_beta")
return "am243x-lp";
if(system.deviceData.device == "AM263x_beta")
return "am263x-cc";
if(system.deviceData.device == "AM273x")
return "am273x-evm";
if(system.deviceData.device == "AWR294X")
return "awr294x-evm";
if(system.deviceData.device == "AM62x")
return "am62x-sk";
};
function isCName(id) {
if ( (id != null) && (id.match(/^[a-zA-Z_][0-9a-zA-Z_]*$/) != null) )
{
return true;
}
return false;
}
function camelSentence(str) {
return (" " + str).toLowerCase().replace(/[^a-zA-Z0-9]+(.)/g, function(match, chr)
{
return chr.toUpperCase();
});
}
function getSysCfgCoreNames()
{
let core_names = [];
for( let core of system.deviceData.cores)
{
core_names.push(core.name);
}
return core_names;
}
function getStaticModuleForCore(moduleName, coreName)
{
let context = system.contexts[coreName];
let modules = context ? context.system.modules : {};
let module = modules[moduleName];
if(module && module.$static)
return module.$static;
return undefined;
}
function getModuleForCore(moduleName, coreName)
{
let context = system.contexts[coreName];
let modules = context ? context.system.modules : {};
let module = modules[moduleName];
return module;
}
function makeConfig(staticConfigArr, fieldname, displayName)
{
let config = {};
if(staticConfigArr.length == 0)
return undefined;
config.name = `${fieldname}`;
config.displayName = `${displayName}`;
config.description = `Select ${displayName}`;
config.default = staticConfigArr[0].name;
config.options = [];
for (let i = 0; i < staticConfigArr.length; i++) {
let option = {};
option.name = staticConfigArr[i].name;
if(staticConfigArr[i].description)
{
option.description = staticConfigArr[i].description;
}
config.options.push(option);
}
return config;
}
function checkSameFieldName(instance, fieldname, report)
{
let moduleInstances = instance.$module.$instances;
for (let i = 0; i < moduleInstances.length; i++) {
if (instance[fieldname] === moduleInstances[i][fieldname] &&
instance !== moduleInstances[i]) {
report.logError(`Same ${fieldname} cannot be selected`, instance, fieldname);
}
}
}
function checkSameFieldNameOnAllCores(moduleName, instance, fieldname, report)
{
let coreNames = getSysCfgCoreNames();
for ( let remoteCoreName of coreNames)
{
let remote_core_instance = getModuleForCore(moduleName, remoteCoreName);
if(remote_core_instance)
{
let moduleInstances = remote_core_instance.$instances;
for (let i = 0; i < moduleInstances.length; i++) {
if (instance[fieldname] === moduleInstances[i][fieldname] &&
instance !== moduleInstances[i]) {
report.logError(`Same ${fieldname} cannot be selected`, instance, fieldname);
}
}
}
}
}
function getUseMcuDomainPeripheralsConfig()
{
let config = {
name: "useMcuDomainPeripherals",
displayName: "Use MCU Domain Peripherals",
default: false,
}
if(getSelfSysCfgCoreName().includes("m4f")) {
config.default = true;
config.readOnly = true;
}
return config;
}
function isMcuDomainSupported()
{
switch(getSocName()) {
case "am243x":
return true;
case "am64x":
return true;
case "am62x":
return true;
default:
return false;
}
}
function findDuplicates(arrayToCheck)
{
const count = arrayToCheck =>
arrayToCheck.reduce((a, b) => ({ ...a,
[b]: (a[b] || 0) + 1
}), {})
const duplicates = dict =>
Object.keys(dict).filter((a) => dict[a] > 1)
return {count: count(arrayToCheck), duplicates: duplicates(count(arrayToCheck))};
}
/*
* Checks whether a given string is empty and returns a string
* If stringToCheck is empty, an empty string is returned otherwise
* stringToAdd is returned
*
* stringToCheck - The string to be compared to empty string
* stringToAdd - The string to return when stringToCheck is non empty
*
*/
function stringOrEmpty(stringToCheck, stringToAdd)
{
if (stringToCheck != "")
{
return stringToAdd;
}
return "";
}
/*
* Check that HW signal type matches a specified array of types
*
* Example: within a module's filterHardware(component) method:
* for (sig in component.signals) {
* let type = component.signals[sig].type;
* if (Common.typeMatches(type, ["PWM", "DOUT"])) {
* :
* }
* }
*
* type - a string or array of strings that are valid signal types
* nameArray - array of signal name types that must match one of the signal
* types named by type
*
* Returns true iff nameArray contains at least one type name that's
* specified the type parameter.
*/
function typeMatches(type, nameArray)
{
let options = {};
if (type instanceof Array || typeof type == "object") {
for (var i = 0; i < type.length; i++) {
options[type[i]] = 1;
}
}
else if (typeof type == "string" || type instanceof String) {
options[type] = 1;
}
for (var i = 0; i < nameArray.length; i++) {
let name = nameArray[i];
if (name in options) {
return (true);
}
}
return (false);
}
exports = {
getSelfSysCfgCoreName,
isSciClientSupported,
getSocName,
getDeviceName,
camelSentence,
getStaticModuleForCore,
getModuleForCore,
getSysCfgCoreNames,
getUseMcuDomainPeripheralsConfig,
isMcuDomainSupported,
findDuplicates,
stringOrEmpty,
typeMatches,
getNodePath,
validate: {
checkSameInstanceName : function (instance, report) {
checkSameFieldName(instance, "instance", report);
},
checkSameInstanceNameOnAllCores : function (moduleName, instance, report) {
checkSameFieldNameOnAllCores(moduleName, instance, "instance", report);
},
checkSameFieldName : checkSameFieldName,
checkSameFieldNameOnAllCores : checkSameFieldNameOnAllCores,
checkNumberRange: function(instance, report, property, min, max, displayFormat) {
if(instance[property] > max || instance[property] < min) {
let base = 10;
if(displayFormat == "hex") {
base = 16;
report.logError( `Value must be between 0x${min.toString(base).toUpperCase()}`
+ ` .. 0x${max.toString(base).toUpperCase()}`,
instance, property);
}
else {
report.logError( `Value must be between ${min.toString(base).toUpperCase()}`
+ ` .. ${max.toString(base).toUpperCase()}`,
instance, property);
}
}
},
checkValidCName: function(instance, report, property) {
if(isCName((instance[property])) === false) {
report.logError(`Provide a valid C name`, instance, property);
}
},
checkConfigurableValueMatchForAllCores(moduleName, instance, report, configurable, core_instances)
{
let coreNames = getSysCfgCoreNames();
let selfCoreName = getSelfSysCfgCoreName();
for ( let remoteCoreName of coreNames)
{
if( remoteCoreName != selfCoreName)
{
let remote_core_instance = getStaticModuleForCore(moduleName, remoteCoreName);
if(remote_core_instance && instance[configurable] != remote_core_instance[configurable])
{
report.logError("Value MUST match with other cores", instance, configurable);
break;
}
}
}
},
},
ui:
{
makeInstanceConfig: function(staticConfigArr) {
return makeConfig(staticConfigArr, "instance", "Instance");
},
makeConfig: makeConfig,
}
};