Запись изменений с использованием скриптов


Wiki

Скрипты - это специальный механизм программы, который позволяет реализовать последовательную передачу и обработку инструкций для выполнения команд установки настроек программатора, записи и чтения кода из памяти трансивера и пр.

Скрипты могут применяться в случаях, когда необходимо реализовать сценарии специфического программирования трансивера, алгоритм записи в память которого отличается от стандарта MSA и требует выполнения ряда особых инструкций для успешного сохранения изменений в памяти трансивера, а также когда требуется автоматизировать многократно повторяемый процесс программирования различных областей памяти трансивера с минимальным участием оператора.


Как использовать скрипт?

  1. Откройте меню Control - Write using a script - Select a script file, чтобы указать путь к файлу скрипта;
  2. Убедитесь, что область редактора содержит корректный код, если скрипт во время исполнения использует данные из области редактора;
  3. Нажмите кнопку для записи в память трансивера, чтобы запустить скрипт.

При выполнении скрипта программа игнорирует настройки выбранной области. Область чтения и записи должна быть установлена в командах скрипта.

Следует обратить внимание, что после выполнения скрипта программное обеспечение не проводит проверку на успешность записи.


Как сбросить скрипт?

Перейдите в меню Control - Write using a script - Reset script, чтобы сбросить скрипт и вернуться к механизму стандартной записи.


Как создать скрипт?

Синтаксис команд механизма скриптов реализован на основе протокола команд SFPTotal.

Пример:

// Запись пароля AABBCCDD в страницу A2 смещение 7B
w2A2007B03AABBCCDD
// Запись кода из области редактора в страницу A0 смещение 00
w2A000007F{00;7F}
// Запись значения 80 в страницу A2 смещение 7F
w2A2007F0080
// Запись значения 01 в страницу A2 смещение FF
w2A200FF0001
PAUSE
// Чтение кода из страницы A0 смещение 00
R2A000007F

Создайте текстовый файл и укажите набор инструкций построчно. Сохраните файл скрипта, чтобы использовать данный сценарий программирования в программе.


Дополнительные команды скриптов

Набор дополнительных команд обрабатывается программой.

PAUSE

Пауза при выполнении скрипта. По-умолчанию, пауза 100 мс.

Может использоваться с дополнительным параметром длительности паузы в миллисекундах.

PAUSE
Delay 100ms
PAUSE=2000
Delay 2000ms


SETCHECKSUM

Вызов функции пересчета контрольной суммы.


SETVAL

Устанавливает значение YY в ячейке редактора по смещению XX. Значения параметров указываются в верхнем регистре в формате HEX.

Параметр смещения принимает значения в диапазоне от 00 до 7F.

SETVAL 7F 03


{00;7F}

Макрос подстановки {XX;YY} используется внутри других команд для вставки фрагмента кода из редактора. При выполнении скрипта макрос будет автоматически заменен на текущее значение фрагмента кода в области редактора от байта XX размером YY байт.

Обратите внимание, что значение параметра YY равное 00 в HEX означает, что в макрос должен быть подставлен 1 байт, а значение 7F в HEX означает, что должны быть подставлены 128 байт. Параметр YY принимает значение длины фрагмента кода (количество байт), которое должно быть уменьшено на единицу и переведено в шестнадцатеричное представление.

Пример записи фрагмента 128 байт в область страницы A2h по смещению 80h.

w2A200807F{00;7F}

Пример записи фрагмента пороговых значений DDM размером 96 байт в область страницы A2h по смещению 00h c последующим чтением.

W2A200005F{00;5F}

Пример присвоения переменной значения в виде фрагмента кода по смещению 0x44 размером 16 байт, содержащего серийный номер.

$VAR2={44;0F}


$VAR1

Буферная переменная $VAR1. Используется для сохранения фрагментов кода из редактора и вставки содержимого буферных переменных при исполнении скрипта.

Программа поддерживает 10 буферных переменных $VAR0 — $VAR9.

$VAR1={00;43}
$VAR2={44;0F}
$VAR3={54;2B}
$VAR4=002AFE
$VAR5=4F


$YYYY

Подставляет в команду значение текущего года.


$MM

Подставляет в команду значение текущего месяца.


$DD

Подставляет в команду значение текущего дня.


BACKUPTOFILE

Запускает процедуру сохранения резервной копии для выбранного в настройках программы типа модуля. Программа выполняет последовательное чтение доступных страниц и сохранение данных в файл. Команда эквивалентна вызову функции из меню программы.


BACKUPDIR

Установка каталога для сохранения бэкапов. Может принимать другие параметры для создания каталога с определенным наименованием.

Пример создания каталога бекапов с указанием даты в имени папки.

$VAR5=SOMETEXT
BACKUPDIR=\$YYYY-$MM-$DD_$VAR5\
BACKUPTOFILE


IMPORTFILE

Импорт HEX кода из двоичного файла в область редактора.

IMPORTFILE=\catalog\filename.bin


IMPORTHEX

Импорт HEX кода в область редактора.

Пример импорта фрагмента кода размером 128 байт в область редактора.

IMPORTHEX=030407100000000000000006670000000802001E4F454D2020202020202020202020202000000B4053465031302D535220202020202020204120202003520091001A000058473936535230313020202020202020303830393236202068F0031200001111A8DD05AA642FAA6F5A64DAF3285A9D000000000000000000F05E482F

Импорт кода в область редактора как результата конкатенации буферных переменных.

$VAR1={00;43}
$VAR2={44;0F}
$VAR3={54;2B}
IMPORTHEX=$VAR1$VAR2$VAR3


INCREMENT

Команда инкрементирует значение переменной, которая содержит шестнадцатеричное представление кода таким образом, что число в конце строки в тестовом представлении переменной значения будет увеличено на единицу.

Например, текстовое представление значения переменной в виде SN129YY00201 будет преобразовано в SN129YY00202.

Если перед числовым фрагментом содержатся нули, то при увеличении разрядности инкрементируемого числового значения программа будет пытаться сохранить исходную длину строки, сдвигая значение влево. Таким образом, значение SN129YY00999 будет преобразовано в SN129YY01000.

$VAR1={00;43}
// Присваиваем переменной значение области кода, содержащей серийный номер
$VAR2={44;0F}
$VAR3={54;2B}
INCREMENT $VAR2
IMPORTHEX=$VAR1$VAR2$VAR3


ERASEVENDORCODE

Сбрасывает область vendor specific в окне редактора в нули.


COUNTER

Счетчик итераций при выполнении скрипта.

Установите данную команду в начале файла скрипта, который должен исполняться циклично. Текущее значение счетчика итераций может быть получено через переменную $COUNTER

// Вызов счетчика итераций
COUNTER
// Присвоение текущего значения счетчика переменной 
$VAR0=$COUNTER
// Вывод значения счетчика
ECHO $COUNTER


IF A ... B THEN ...

Команда сравнения значений. Используйте конструкцию для сравнения значений A и B и выполнения команды, следующей за оператором THEN, которая будет исполнена, если условие, заданное в выражении, верно.

// Присваиваем числовые значения переменным
$VAR1=10
$VAR2=20
// Команда выводит окно с сообщением, если условие верно.
IF $VAR1 < $VAR2 THEN MSGBOX HELLO WORLD!


LOOP

Команда повтора скрипта. Используйте команду в конце файла скрипта, чтобы сообщить программе, что сценарий должен быть исполнен повторно. Действие команды LOOP может быть отменено командой UNLOOP. Используйте условия для выхода из цикла, чтобы избежать бесконечного повторения.

Пример использования с условием.

COUNTER
...
R1A000007F
...
// Повторять скрипт, пока не будет выполнено 10 повторов
IF $COUNTER < 10 THEN LOOP

В случае попадания в бесконечный цикл процесс выполнения скрипта может быть остановлен глобальным прерыванием через меню


STRTOHEX

Преобразует текстовое значение, следующее после оператора, в HEX строку

$VAR9=STRTOHEX QSFP28-SR4 
MSGBOX $VAR9


HEXTOSTR

Преобразует HEX строку строку, следующую после оператора, в текстовое представление.

$VAR9=HEXTOSTR 5153465032382D535234202020202020
MSGBOX $VAR9


PADRIGHTHEX

Команда дополняет шестнадцатеричное значение $VAR1 символом с кодом YY справа, пока длина текстового представления значения не достигнет значения XX.

Формат команды:

PADRIGHTHEX XX YY $VAR1

  • XX - числовое значение в десятичном представлении - длина текстового представления HEX строки;
  • YY - HEX код символа, которым должна быть дополнена строка до нужной длины;
  • $VAR1 - переменная, содержащая HEX строку для преобразования.
// Преобразуем текстовое значение в HEX строку и сохраняем в переменной
$VAR9=STRTOHEX QSFP28-SR4 
// Дополняем значение переменной справа пробелами (HEX код 0x20) до длины 16 байт 
$VAR8=PADRIGHTHEX 16 20 $VAR9
ECHO $VAR8

Данная команда полезна, когда используется присвоение текстового значения переменной и необходимо преобразовать значение в HEX строку определенной длины.


PADLEFTHEX

Работает аналогично PADRIGHTHEX . Команда дополняет шестнадцатеричное значение $VAR1 символом с кодом YY слева, пока длина текстового представления значения не достигнет значения XX.


SAVECODEDIR

Устанавливает путь для автоматического сохранения файла кода без диалогового окна.

Пример установки пути сохранения кода в каталог с наименованием в виде серийного номера кода:

$VAR4=HEXTOSTR {44;0F}
SAVECODEDIR=C:\Users\DemoUser\Desktop\Codes\$VAR4


SAVEFILE

Сохраняет код в файл по пути, установленному командой SAVECODEDIR. Имя файла будет сформировано программой автоматически в соответствии с выбранным типом модуля и страницей.

$VAR4=HEXTOSTR {44;0F}
SAVECODEDIR=C:\Users\DemoUser\Desktop\Codes\$VAR4
SAVEFILE


SIGNATURE

Вызов генератора с предустановленными параметрами.

Для использования данной функции в программном обеспечении должна присутствовать расширенная лицензия генератора (не входит в стандартную поставку).


Внешний обработчик API

APIURL

Команда задает URL для обращения к внешнему обработчику API.

APIURL=http://localhost/example/api.php

APICALL

Команда осуществляет обращение к внешнему обработчику API. Эквивалентна нажатию кнопки API в основном окне программы.

Формат POST запроса при обращении к APIURL

POST Fields: code=0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000&module_type=1&table=A0&offset=00
  • code - код, строка длиной 256 байт (HEX, uppercase);
  • module_type - тип модуля (0 - GBIC, 1 - SFP, 2 - SFP-DD, 3 - XFP, 4 - QSFP, 5 - QSFP-DD, 6 - OSFP);
  • table - адрес таблицы (HEX, uppercase; пример: A0, A2);
  • offset - смещение для таблицы (HEX, uppercase; пример: 00, 80).

Ответ сервера должен быть возвращен в виде строки формата JSON:

{"status":1,"script":"R1A000007F\r\nW1A000007F{00;7F}\r\n","message":"","code":"0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","module_type":"1","table":"A0","offset":"00"}

Ответ сервера должен содержать следующие параметры:

  • status - статус обработки. 1 - импорт и выполнение скрипта, 0 - отображение сообщения без импорта кода;
  • script - текст скрипта для исполнения после импорта кода; оставить пустым, если скрипт не задан;
  • message - возвращаемое сообщение; выводится при status=0;
  • code - возвращаемый код, строка длиной 256 байт (HEX, uppercase);
  • module_type - тип модуля (0 - GBIC, 1 - SFP, 2 - SFP-DD, 3 - XFP, 4 - QSFP, 5 - QSFP-DD, 6 - OSFP);
  • table - адрес таблицы (HEX, uppercase; пример: A0, A2);
  • offset - смещение для таблицы (HEX, uppercase; пример: 00, 80).


Математические операции

Обработчик скриптов позволяет производить математические операции сложения, вычитания, умножения и деления с помощью команды MATH.

Формат команды:

MATH Значение1 %Оператор Значение2

Поддерживаемые операторы математических операций:

  • + — сложение;
  • - — вычитание;
  • * — умножение;
  • / — деление;
COUNTER
$VAR0=MATH 10 - $COUNTER
ECHO $VAR0
// Повторяем скрипт пока выполняется условие
IF $VAR0 > 0 THEN LOOP


Пользовательский файл

Команды для работы с пользовательским файлом.

USERFILEPATH

Устанавливает путь к пользовательскому файлу.

USERFILEPATH=C:\Users\User\Desktop\user-file.txt

GETUSERFILESTRING

Считывает указанную строку из пользовательского файла.

GETUSERFILESTRING 10

SAVETOUSERFILE

Сохранить данные в пользовательский файл.

Пример:

// Сохраняем серийный номер в переменную
$VAR2={44;0F}
// Сохраняем значение переменной в пользовательский файл
SAVETOUSERFILE HEXTOSTR $VAR2
// Добавляем перенос строки и возврат каретки
SAVETOUSERFILE HEXTOSTR 0D0A

$STRCOUNTUSERFILE

Значение содержит количество строк в пользовательском файле.

// Вычисляем позицию вставленной строки вычитанием значения количества циклов скрипта из значения количества строк файла 
$VAR0=MATH $STRCOUNTUSERFILE - $COUNTER
ECHO $VAR0
// Читаем из файла последнюю вставленную строку
GETUSERFILESTRING $VAR0