Update repo
This commit is contained in:
@@ -0,0 +1,269 @@
|
||||
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() + "_xbar.js");
|
||||
|
||||
/* Intro splash on GUI */
|
||||
let longDescription = "The CLB X-BAR takes signals from inside " +
|
||||
"the device and brings them to the CLB AUXSIGx inputs.";
|
||||
|
||||
function findDuplicates(arrayToCheck)
|
||||
{
|
||||
const count = arrayToCheck =>
|
||||
arrayToCheck.reduce((a, b) => ({ ...a,
|
||||
[b]: (a[b] || 0) + 1
|
||||
}), {}) // don't forget to initialize the accumulator
|
||||
|
||||
const duplicates = dict =>
|
||||
Object.keys(dict).filter((a) => dict[a] > 1)
|
||||
|
||||
//console.log(count(arrayToCheck)) // { Mike: 1, Matt: 1, Nancy: 2, Adam: 1, Jenny: 1, Carl: 1 }
|
||||
//console.log(duplicates(count(arrayToCheck)))
|
||||
|
||||
return {count: count(arrayToCheck), duplicates: duplicates(count(arrayToCheck))};
|
||||
}
|
||||
|
||||
function onChangeauxInput(inst, ui)
|
||||
{
|
||||
//console.log(inst.$module.$instances);
|
||||
|
||||
}
|
||||
|
||||
function onValidate(inst, validation) {
|
||||
|
||||
var usedAuxs = [];
|
||||
for (var instance_index in inst.$module.$instances)
|
||||
{
|
||||
var instance_obj = inst.$module.$instances[instance_index];
|
||||
usedAuxs.push(instance_obj.auxInput);
|
||||
}
|
||||
|
||||
var duplicatesResult = findDuplicates(usedAuxs)
|
||||
|
||||
if (duplicatesResult.duplicates.length != 0)
|
||||
{
|
||||
var allDuplicates = "";
|
||||
for (var duplicateNamesIndex in duplicatesResult.duplicates)
|
||||
{
|
||||
allDuplicates = allDuplicates + Common.stringOrEmpty(allDuplicates, ", ")
|
||||
+ duplicatesResult.duplicates[duplicateNamesIndex];
|
||||
}
|
||||
validation.logError(
|
||||
"The AUXSIG Inputs cannot be same for multiple modules. Duplicates: " + allDuplicates,
|
||||
inst, "auxInput");
|
||||
}
|
||||
|
||||
var optionNamePrepend = "XBAR_MUX"
|
||||
if (inst["useSourceSelect"])
|
||||
{
|
||||
var muxes = []
|
||||
for (var sourceSignal of inst.sourceSignals)
|
||||
{
|
||||
var mux = muxOptionToMuxNumber[sourceSignal]
|
||||
if (muxes.includes(optionNamePrepend + mux)){
|
||||
validation.logError(
|
||||
"There are multiple signals selected for MUX" + mux + ". Only one is allowed at a time per MUX. Signal: " + sourceSignal,
|
||||
inst, "sourceSignals");
|
||||
}
|
||||
else {
|
||||
muxes.push(optionNamePrepend + mux)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function onChangeMuxesUsed(inst, ui)
|
||||
{
|
||||
var optionNamePrepend = "XBAR_MUX"
|
||||
var muxSource = {}
|
||||
ui["sourceSignals"].hidden = !inst["useSourceSelect"]
|
||||
if (inst["useSourceSelect"])
|
||||
{
|
||||
var muxes = []
|
||||
for (var sourceSignal of inst.sourceSignals)
|
||||
{
|
||||
var mux = muxOptionToMuxNumber[sourceSignal]
|
||||
muxSource[mux] = sourceSignal
|
||||
if (!muxes.includes(optionNamePrepend + mux)){
|
||||
muxes.push(optionNamePrepend + mux)
|
||||
}
|
||||
}
|
||||
inst.muxesUsed = muxes;
|
||||
ui.muxesUsed.readOnly = true;
|
||||
}
|
||||
else {
|
||||
ui.muxesUsed.readOnly = false;
|
||||
}
|
||||
var muxesUsed = inst.muxesUsed;
|
||||
for (var muxConfigIndex in muxConfigs)
|
||||
{
|
||||
var muxConfigName = muxConfigs[muxConfigIndex];
|
||||
var muxNumber = parseInt(muxConfigName.replace("mux", "").replace("Config", ""))
|
||||
var turnOnMux = false
|
||||
for (var muxesUsedIndex in muxesUsed)
|
||||
{
|
||||
var usedMuxName = muxesUsed[muxesUsedIndex]
|
||||
var usedMuxNumberString = usedMuxName.replace("XBAR_MUX", "")
|
||||
var usedMuxNumber = parseInt(usedMuxName.replace("XBAR_MUX", ""))
|
||||
//console.log("used: " + usedMuxNumber)
|
||||
//console.log("checking: " + muxNumber)
|
||||
var turnOnMux = true;
|
||||
|
||||
if (usedMuxNumber == muxNumber)
|
||||
{
|
||||
turnOnMux = true;
|
||||
if (inst["useSourceSelect"])
|
||||
{
|
||||
inst[muxConfigName] = "XBAR_CLB_MUX" + usedMuxNumberString + "_" + muxSource[usedMuxNumberString]
|
||||
}
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
turnOnMux = false;
|
||||
}
|
||||
|
||||
}
|
||||
if (turnOnMux)
|
||||
{
|
||||
ui[muxConfigName].hidden = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
ui[muxConfigName].hidden = true;
|
||||
}
|
||||
ui[muxConfigName].readOnly = inst["useSourceSelect"];
|
||||
}
|
||||
}
|
||||
|
||||
var config = [];
|
||||
var latchModeConfig = {
|
||||
name : "latchMode",
|
||||
displayName : "Latch Mode",
|
||||
description : 'Whether the output is latched or not',
|
||||
hidden : false,
|
||||
default : false
|
||||
};
|
||||
|
||||
var invertConfig = {
|
||||
name : "invertMode",
|
||||
displayName : "Invert Mode",
|
||||
description : 'Whether the output is inverted or not',
|
||||
hidden : false,
|
||||
default : false
|
||||
};
|
||||
|
||||
var muxesUsed = {
|
||||
name : "muxesUsed",
|
||||
displayName : "MUXes to be used",
|
||||
description : 'Which MUXes are be to use from the CLB X-BAR.',
|
||||
hidden : false,
|
||||
default : [],
|
||||
minSelections: 0,
|
||||
onChange : onChangeMuxesUsed,
|
||||
options : device_driverlib_peripheral.XBAR_MUXES
|
||||
|
||||
}
|
||||
|
||||
var auxInput = {
|
||||
name : "auxInput",
|
||||
displayName : "Aux Signal Input",
|
||||
description : 'Which Aux Signal is configured to be sourced from the muxes.',
|
||||
hidden : false,
|
||||
default : device_driverlib_peripheral.XBAR_AuxSigNum[0].name,
|
||||
onChange : onChangeauxInput,
|
||||
options : device_driverlib_peripheral.XBAR_AuxSigNum,
|
||||
|
||||
}
|
||||
|
||||
|
||||
config.push(auxInput);
|
||||
//config.push(latchModeConfig);
|
||||
config.push(invertConfig);
|
||||
|
||||
config.push({
|
||||
name: "useSourceSelect",
|
||||
displayName: "Auto Enable Mux Setting From Source",
|
||||
description: "Select your source and have the muxes used get autocalculated",
|
||||
longDescription: "Instead of selecting the muxes to be used and then selecting your source signals, select your source signals and \
|
||||
and have the muxes to be used auto calculated",
|
||||
default : false,
|
||||
onChange: onChangeMuxesUsed,
|
||||
})
|
||||
|
||||
|
||||
|
||||
var muxSelectConfig = []
|
||||
var muxConfigs = []
|
||||
var allMuxOptions = []
|
||||
var muxOptionToMuxNumber = {}
|
||||
|
||||
for (var mux_number_index in device_driverlib_peripheral.XBAR_CLBMuxConfig_All_MUXES)
|
||||
{
|
||||
|
||||
var muxSpecificOptions = device_driverlib_peripheral.XBAR_CLBMuxConfig_All_MUXES[mux_number_index]
|
||||
if (muxSpecificOptions[0] != undefined)
|
||||
{
|
||||
var noMuxNumOptions = muxSpecificOptions.map(element => {
|
||||
var elementName = element.name.replace(/XBAR_CLB_MUX[0-9][0-9]_/g, "")
|
||||
var elementMux = element.name.substring("XBAR_CLB_MUX".length, "XBAR_CLB_MUX".length + 2)
|
||||
muxOptionToMuxNumber[elementName] = elementMux
|
||||
return { name: elementName, displayName: element.displayName+" (MUX "+ elementMux + ")" }
|
||||
});
|
||||
|
||||
|
||||
var muxOptions = {
|
||||
name : "mux" + mux_number_index + "Config",
|
||||
displayName : "MUX " + mux_number_index + " Config",
|
||||
description : 'Mux Configuration for CLB XBAR\'s MUX number ' + mux_number_index,
|
||||
hidden : true,
|
||||
default : muxSpecificOptions[0].name,
|
||||
options : muxSpecificOptions
|
||||
};
|
||||
|
||||
muxConfigs.push(muxOptions.name)
|
||||
|
||||
muxSelectConfig.push(muxOptions)
|
||||
|
||||
allMuxOptions = allMuxOptions.concat(noMuxNumOptions)
|
||||
}
|
||||
}
|
||||
|
||||
var sourceSignals = {
|
||||
name : "sourceSignals",
|
||||
displayName : "Source Signals",
|
||||
description : 'Which signals to use for this output.',
|
||||
hidden : true,
|
||||
default : [],
|
||||
minSelections: 0,
|
||||
options : allMuxOptions,
|
||||
onChange: onChangeMuxesUsed,
|
||||
}
|
||||
|
||||
config.push(sourceSignals)
|
||||
config.push(
|
||||
{
|
||||
name: "GROUP_MUXSELECT",
|
||||
displayName: "Mux Selection Method",
|
||||
config : muxSelectConfig
|
||||
}
|
||||
)
|
||||
muxSelectConfig.unshift(muxesUsed);
|
||||
|
||||
var clbxbarModule = {
|
||||
peripheralName: "CLBXBAR",
|
||||
displayName: "CLBXBAR",
|
||||
maxInstances: 8,
|
||||
defaultInstanceName: "myCLBXBAR",
|
||||
description: "CLB X-bar",
|
||||
config: config,
|
||||
templates: {
|
||||
boardc : "/driverlib/clbxbar/clbxbar.board.c.xdt",
|
||||
boardh : "/driverlib/clbxbar/clbxbar.board.h.xdt"
|
||||
},
|
||||
validate : onValidate,
|
||||
};
|
||||
|
||||
exports = clbxbarModule;
|
||||
Reference in New Issue
Block a user