c2000ware-core-sdk/driverlib/.meta/epwm/epwm_json_resolver.js

296 lines
9.9 KiB
JavaScript
Raw Normal View History

2023-06-24 09:05:38 +03:00
let Common = system.getScript("/driverlib/Common.js");
let Pinmux = system.getScript("/driverlib/pinmux.js");
let device_driverlib_peripheral =
system.getScript("/driverlib/device_driverlib_peripherals/" +
Common.getDeviceName().toLowerCase() + "_epwm.js");
let epwm_json = system.getScript("/driverlib/epwm/epwm.json").epwm;
//console.log(epwm_json);
let OPEN_PAR = "(";
let CLOSE_PAR = ");";
let COMMA = ", ";
let _BASE = "_BASE"
function getCode(inst, inst_submodule, ui_name, commentOut, indicies){
var output = "";
var appendArguments = true;
var showOutput = true;
// These items have the same function
var duplicate_inst = ["epwmTimebase_hsClockDiv", "epwmDigitalCompare_stopValleyCaptureTriggerCount"];
var duplicate_pair = ["epwmTimebase_clockDiv", "epwmDigitalCompare_startValleyCaptureTriggerCount"];
// console.log("UI Name")
// console.log(ui_name)
var info = epwm_json.find(input => {
return (input.name === ui_name) && input.devices.includes(Common.getDeviceName())
})
if (!info){
//console.log("Missing JSON entry:");
//console.log(ui_name)
return "";
}
if(inst.hrpwm_enable)
{
var uis_with_same_driverlib_function = epwm_json.filter(input => {
return (input.driverlibFunctionHR === info.driverlibFunctionHR) && input.devices.includes(Common.getDeviceName())
})
}
else
{
var uis_with_same_driverlib_function = epwm_json.filter(input => {
return (input.driverlibFunction === info.driverlibFunction) && input.devices.includes(Common.getDeviceName())
})
}
//console.log("Code Info:");
//console.log(info);
//console.log("Other UIs with the same driverlib function:");
//console.log(uis_with_same_driverlib_function);
var require_other_ui_names = false;
var driverlibFunctionArgKeysArray = Object.keys(info.driverlibFunctionArg);
var outputFunctionArgs = new Array(driverlibFunctionArgKeysArray.length);
for (var functionArgIndex = 0; functionArgIndex < driverlibFunctionArgKeysArray.length; functionArgIndex++)
{
var functionArgName = driverlibFunctionArgKeysArray[functionArgIndex];
var functionArgValue = info.driverlibFunctionArg[functionArgName];
if (functionArgName == "base")
{
outputFunctionArgs[functionArgIndex] = inst.$name + _BASE;
}
else if (functionArgValue == "this")
{
outputFunctionArgs[functionArgIndex] = inst_submodule[ui_name];
}
else if (functionArgValue == "")
{
require_other_ui_names = true;
var requried_other_ui = uis_with_same_driverlib_function.find(input => {
if (input.driverlibFunctionArg[functionArgName] == "this")
{
return input
}
});
outputFunctionArgs[functionArgIndex] = inst_submodule[requried_other_ui.name];
}
else
{
outputFunctionArgs[functionArgIndex] = functionArgValue;
}
}
// For boolean type UI elements
// If it has an alternate driverlib version then it is boolean type
// Use driverlibFunctionAlt
// If driverlibFunction or driverlibFunctionAlt is empty then do not include arguments in the output
//console.log(inst.hrpwm_enable)
if(inst.hrpwm_enable)
{
//console.log(ui_name, inst_submodule[ui_name], info.hasOwnProperty('driverlibFunctionHRAlt'),info.hasOwnProperty('driverlibFunctionHR'))
if (info.hasOwnProperty('driverlibFunctionHRAlt'))
{
// Check to see if the set value is different from the default value
if (showOutput)
{
if (inst_submodule[ui_name])
{
//console.log("true", ui_name)
if (info.driverlibFunctionHR == "")
{
output = "";
appendArguments = false;
}
else
{
output = info.driverlibFunctionHR;
appendArguments = true;
}
}
else
{
//console.log("not true", ui_name)
if (info.driverlibFunctionHRAlt == "")
{
output = "";
appendArguments = false;
//console.log(ui_name)
}
else
{
output = info.driverlibFunctionHRAlt;
appendArguments = true;
}
//console.log(inst_submodule[ui_name], output)
}
}
else
{
appendArguments = false;
}
}
else
{
if (info.hasOwnProperty('driverlibFunctionHR'))
{
output = info.driverlibFunctionHR;
appendArguments = true;
}
else
{
output = "";
appendArguments = false;
}
}
}
else
{
if (info.hasOwnProperty('driverlibFunctionAlt'))
{
// Check to see if the set value is different from the default value
if (showOutput)
{
if (inst_submodule[ui_name])
{
if (info.driverlibFunction == "")
{
output = "";
appendArguments = false;
}
else
{
output = info.driverlibFunction;
appendArguments = true;
}
}
else
{
if (info.driverlibFunctionAlt == "")
{
output = "";
appendArguments = false;
}
else
{
output = info.driverlibFunctionAlt;
appendArguments = true;
}
}
}
else
{
appendArguments = false;
}
}
else
{
if (info.hasOwnProperty('driverlibFunction'))
{
output = info.driverlibFunction;
appendArguments = true;
}
else
{
output = "";
appendArguments = false;
}
}
}
//console.log(output)
// Only add arguments to a function if there is a function being outputted
// This is cross referenced with the code above
if (appendArguments)
{
//console.log(inst_submodule[ui_name], output)
output += OPEN_PAR;
//console.log(inst_submodule[ui_name], output)
for (var outputFunctionArgIndex = 0; outputFunctionArgIndex < outputFunctionArgs.length; outputFunctionArgIndex++)
{
// Check to see if the argument belongs to an OR'd input
if (String(outputFunctionArgs[outputFunctionArgIndex]).indexOf(',') > -1)
{
outputFunctionArgs[outputFunctionArgIndex] = String(outputFunctionArgs[outputFunctionArgIndex]).replace(/,/g, " | ")
//showOutput = true;
}
// Check to see if argument is empty (no options of an OR'ed select are selected) and output 0
if (String(outputFunctionArgs[outputFunctionArgIndex]) == "")
{
// Don't output the code if there is no argument for it
showOutput = false;
}
output += outputFunctionArgs[outputFunctionArgIndex];
if (outputFunctionArgIndex != outputFunctionArgs.length - 1)
{
output += COMMA;
}
}
output += CLOSE_PAR;
}
if (showOutput == false)
{
output = "";
}
if (showOutput == true && commentOut == true && output != "")
{
// Handle the special case where multiple sysconfig options have the same output function
if (duplicate_pair.includes(ui_name))
{
var len = indicies.length;
var duplicateIndex = duplicate_pair.indexOf(ui_name);
if(len == 2)
{
if (inst[duplicate_inst[duplicateIndex]] != inst.$module.config[indicies[0]].config[indicies[1]+1].default)
{
output = output;
}
else{output = "//" + output;}
}
else if (len == 3)
{
if (inst[duplicate_inst[duplicateIndex]] != inst.$module.config[indicies[0]].config[indicies[1]].config[indicies[2]+1].default)
{
output = output;
}
else{output = "//" + output;}
}
else if (len == 4)
{
if (inst[duplicate_inst[duplicateIndex]] != inst.$module.config[indicies[0]].config[indicies[1]].config[indicies[2]].config[indicies[3]+1].default)
{
output = output;
}
else{output = "//" + output;}
}
}
else
{
output = "//" + output;
}
//if (ui_name == "epwmTimebase_clockDiv" && inst["epwmTimebase_hsClockDiv"] != "EPWM_HSCLOCK_DIVIDER_2")
//{
// output = output;
//}
//else if (ui_name == "epwmDigitalCompare_startValleyCaptureTriggerCount" && inst["epwmDigitalCompare_stopValleyCaptureTriggerCount"] != "0")
//{
// output = output;
//}
//else
//{
// output = "//" + output;
//}
}
return output;
}
exports = {
getCode : getCode,
};