Содержание
Примеры скриптов для интерфейса IScripted
На этой странице приведены несколько примеров скриптов, демонстрирующих использование API интерфейса IScripted в окне скриптов SigmaStudio.
Обновление параметров (Control Updates)
Приведенный ниже скрипт можно использовать для обновления различных параметров на показанной схеме.
- controlupdate.sss
// #LANGUAGE# C# // ------------------Linear Gain ---------------- // установить коэффициент усиления модуля 'Gain1' равным 0.25 ss.ObjectSetProperties("setControlValue", "Gain1", 0, 0, "Gain", 0.25); // установить коэффициент усиления модуля 'Gain1_2' равным 0.15 ss.ObjectSetProperties("setControlValue", "Gain1_2", 0, 0, "Gain", 0.15); // -------------------Delay ---------------------- // Установить текущую задержку 10 в 'Delay1' ss.ObjectSetProperties("setControlValue", "Delay1", 0, 0, "DelayValue", 10); // Установить текущую задержку 10 в 'Delay2' ss.ObjectSetProperties("setControlValue", "Delay1_2", 0, 0, "DelayValue", 20); // ------------------ Param EQ ---- // Обновить частоту первого фильтра в 'Param EQ1 до 50 ss.ObjectSetProperties("setControlValue", "Param EQ1", 0, 0, "Frequency10", 50); // Обновить частоту второго фильтра в 'Param EQ1 до 100 ss.ObjectSetProperties("setControlValue", "Param EQ1", 0, 0, "Frequency11", 100); // Обновить частоту третьего фильтра в 'Param EQ1 до 200 ss.ObjectSetProperties("setControlValue", "Param EQ1", 0, 0, "Frequency12", 200); // Обновить коэффициент усиления первого фильтра в 'Param EQ1 до 0.15 ss.ObjectSetProperties("setControlValue", "Param EQ1", 0, 0, "Gain10", 0.15); // Обновить коэффициент усиления второго фильтра в 'Param EQ1 до 0.25 ss.ObjectSetProperties("setControlValue", "Param EQ1", 0, 0, "Gain11", 0.25); // Обновить коэффициент усиления третьего фильтра в 'Param EQ1 до 0.75 ss.ObjectSetProperties("setControlValue", "Param EQ1", 0, 0, "Gain12", 0.75); // Поскольку элементы управления в pramaEQ находятся внутри другой формы, для загрузки изменённых параметров в целевое устройство необходимо вызвать следующие API. object paramEQ1Object = ss.GetCellObject("Param EQ1"); ss.ObjectGetMethod(paramEQ1Object, "PackDataAllControls").Invoke(paramEQ1Object, new object[]{});
Получение текущего роста (Get Current Growth)
Приведенный ниже скрипт можно использовать для получения текущего роста модулей на показанной схеме.
- getGrowth.sss
// #LANGUAGE# C# // ------------------ISIB---------------- // Получить текущий рост 'ISIB1' object[] output; ss.ObjectGetProperties("getCurrentGrowth", "ISIB1", out output, 0); ss.PrintLine(output[0].ToString()); ss.PrintLine(output[1].ToString()); // ------------------General Filter---------------- // Получить текущий рост 'Gen Filter1' ss.ObjectGetProperties("getCurrentGrowth", "Gen Filter1", out output, 0); ss.PrintLine(output[0].ToString()); ss.PrintLine(output[1].ToString()); // ------------------Input---------------- // Получить текущий рост 'Input1' ss.ObjectGetProperties("getCurrentGrowth", "Input1", out output, 0); ss.PrintLine(output[0].ToString()); ss.PrintLine(output[1].ToString()); // ------------------Output---------------- // Получить текущий рост 'Output1' ss.ObjectGetProperties("getCurrentGrowth", "Output1", out output, 0); ss.PrintLine(output[0].ToString()); ss.PrintLine(output[1].ToString());
ICRegisterWrite и ICRegisterRead
Приведенный ниже скрипт можно использовать для записи и чтения регистра без параметра 'ICName'.
- I2CExample_Register_Read_And_Write.sss
// #LANGUAGE# C# // --------------- FIR Filter --------------- byte[] _tableValues = new byte[40] {0x00,0x00,0x00,0x02, 0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02, 0x00,0x00,0x00,0x02, 0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02, 0x00,0x00,0x00,0x02, 0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02, 0x00,0x00,0x00,0x03}; byte[] readValues; // ---------- API ICRegisterWrite --------- ss.ICRegisterWrite( 40,_tableValues, 0, 112 ,0x001B, 2, 4, 0, 0); // ---------- API ICRegisterRead ---------- ss.ICRegisterRead( 40, out readValues, 0, 112 ,0x001B, 2, 4, 0, 0); // ---------- цикл for для вывода считанных значений ---------- for(int i = 0; i < readValues.Length; i ++) { // Вывести значения побайтово ss.PrintLine(readValues[i].ToString()); }
- SPIExample_Register_Read_And_Write.sss
// #LANGUAGE# C# // --------------- FIR Filter --------------- byte[] _tableValues = new byte[40] {0x00,0x00,0x00,0x02, 0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02, 0x00,0x00,0x00,0x02, 0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02, 0x00,0x00,0x00,0x02, 0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02, 0x00,0x00,0x00,0x03}; byte[] readValues; // ---------- API ICRegisterWrite --------- ss.ICRegisterWrite( 40,_tableValues, 1, 0 ,0x0014, 2, 4, 0, 0); // ---------- API ICRegisterRead ---------- ss.ICRegisterRead( 40, out readValues, 1, 0 ,0x0014, 2, 4, 0, 0); // ---------- цикл for для вывода считанных значений ---------- for(int i = 0; i < readValues.Length; i ++) { // Вывести значения побайтово ss.PrintLine(readValues[i].ToString()); }
Тестирование микшера NxM (линейный)
Следующий скрипт создает схему для ADAU1467 с микшером NxM и проверяет его функциональность для заданной конфигурации входа/выхода.
- NxM_Mixertest.sss
// #LANGUAGE# C# // Измените приведённые ниже переменные, чтобы создать тестовый NxM микшер для конкретной конфигурации входов и выходов. int inputs = 8; int outputs = 4; // *********Локальные переменные*************// double GainInc = 0.001; double DCInc = 0.1; double[] InputDCValues = new double[inputs]; double[] OutputReadBackValues = new double[outputs]; object[] DCModuleObjects = new object[inputs]; object[] RBModuleObjects = new object[outputs]; double[,] GainValues = new double[inputs, outputs]; double[] ActualResults = new double[outputs]; double[] ExpectedResults = new double[outputs]; HResult rest; ss.EnableLoggingMode(true); // Создать входные векторы. ss.ProjectNew(); Object IcObject = ss.ObjectInsert("ADAU1467", 300, 100); Object USBiObject = ss.ObjectInsert("USBi", 50, 100); rest =ss.ObjectConnect("USB Interface", 0, "IC 1", 0); int X = 300; int Y = 100; // Добавить ячейку и алгоритм object MixerCellObject = ss.ObjectInsert("NxM Mixer (Linear)", X, Y); rest = ss.ObjectSetProperties("addAlgorithm", MixerCellObject, "IC 1", "NxM Mixer Slew"); ss.PrintLine("Mixer Module Added"); // рост входа и выхода rest = ss.ObjectSetProperties("growAlgorithm", MixerCellObject, 0, inputs - 2, 0); // рост входа rest = ss.ObjectSetProperties("growAlgorithm", MixerCellObject, 0, outputs - 1, 1); // рост выхода ss.PrintLine("Mixer Module Grown"); // Установить коэффициенты усиления для теста int index = 1; for (int i = 0; i < inputs; i++) { for (int j = 0; j < outputs; j++) { GainValues[i, j] = index++ * GainInc; rest = ss.ObjectSetProperties("setControlValue","NxM Linear1", j, i , "Gain" + j +"_" + i, GainValues[i, j]); } } // Добавить DC для входов for (int i = 0; i < inputs; i++) { object DCCellObject = ss.ObjectInsert("DC Input Entry", X - 100, Y + i * 100); rest =ss.ObjectConnect(DCCellObject, 0, MixerCellObject, i); // ss.PrintLine("DC Module " + i + " Added"); DCModuleObjects[i] = DCCellObject; InputDCValues[i] = (i + 1) * DCInc; rest = ss.ObjectSetProperties("setControlValue", DCCellObject, 0, 0 , "DC", InputDCValues[i]); } // Добавить Readback для выходов for (int i = 0; i < outputs; i++) { object RBCellObject = ss.ObjectInsert("DSP Readback", X + 100, Y + i * 100); rest =ss.ObjectConnect(MixerCellObject, i, RBCellObject, 0); // ss.PrintLine("ReadBack Module " + i + " Added"); RBModuleObjects[i] = RBCellObject; } // Загрузить ss.ProjectLinkCompileDownload(); System.Threading.Thread.Sleep(3000); ss.PrintLine("*****************************************"); bool isFailed = false; for (int outIndx = 0; outIndx < outputs; outIndx++) { // Найти адрес параметров readback string[] names; int[] addresses; ss.ICGetParamNamesAndAddresses("IC 1", RBModuleObjects[outIndx], out names, out addresses); int RBModuleAddresse = addresses[0]; // Вычислить ожидаемый результат и сравнить с фактическим результатом. ExpectedResults[outIndx] = 0; for (int inIndx = 0; inIndx < inputs; inIndx++) { ExpectedResults[outIndx] += GainValues[inIndx, outIndx] * InputDCValues[inIndx]; } // Считать фактический результат float valRead; ss.ICParameterRead("IC 1", RBModuleAddresse, 8, 24, out valRead); ActualResults[outIndx] = valRead; double error = System.Math.Abs(ExpectedResults[outIndx] - ActualResults[outIndx]); ss.PrintLine(System.String.Format("Out{0}: Expected = {1:0.00000000000000f} Actual = {2:0.00000000000000f} Error = {3:0.00000000000000f}", outIndx, ExpectedResults[outIndx], ActualResults[outIndx],error )); if (error > 0.00001) { isFailed = true; } } ss.PrintLine("*****************************************"); if (isFailed) { ss.PrintLine("Test failed"); } else { ss.PrintLine("Test Pass"); }
Обновление параметров для AutoEQ
Приведенный ниже скрипт можно использовать для автоматизации модуля Auto EQ.
- AutoEQScript.sss
// #LANGUAGE# C# ss.ObjectSetProperties("setControlValue", "Auto EQ1", 0, 0, "RespType_0", "Impulse"); ss.ObjectSetProperties("setControlValue", "Auto EQ1", 0, 0, "RespType_1", "Impulse"); ss.ObjectSetProperties("setControlValue", "Auto EQ1", 0, 0, "RespType_2", "Impulse"); ss.ObjectSetProperties("setControlValue", "Auto EQ1", 0, 0, "ResponseFile_0", "C:\\SSExampleSchematics\\S300\\AutoEQ\\Woofer.txt"); ss.ObjectSetProperties("setControlValue", "Auto EQ1", 0, 0, "ResponseFile_1", "C:\\SSExampleSchematics\\S300\\AutoEQ\\Mid 1.txt"); ss.ObjectSetProperties("setControlValue", "Auto EQ1", 0, 0, "ResponseFile_2", "C:\\SSExampleSchematics\\S300\\AutoEQ\\Tweeter.txt"); ss.ObjectSetProperties("setControlValue", "Auto EQ1", 0, 0, "TargetResponseCsv_0", "C:\\SSExampleSchematics\\S300\\AutoEQ\\TargetResponse.csv"); ss.ObjectSetProperties("setControlValue", "Auto EQ1", 0, 0, "DesignAll", true);