Кермит не ждет достаточно долго - PullRequest
0 голосов
/ 10 января 2019

Я пишу скрипт Kermit , чтобы запустить эльфа на плате IMX с пользовательским ядром , и пытаюсь захватить строку, написанную эльфом, с помощью следующий скрипт:

set input echo on
lineout tests_domains/usb/hid/build/test  # send elf name to the board's shell
minput 40 "<--- PNC TEST STATUS: PASS" "<--- PNC TEST STATUS: INCONCLUSIVE" "<--- PNC TEST STATUS: FAIL" "<--- PNC TEST STATUS: NOTRUN" "<--- PNC TEST STATUS: TIMEOUT"
switch \v(minput) {
  :1, echo "TEST PASS", exit 0
  :2, echo "TEST INCONCLUSIVE", exit 1
  :3, echo "TEST FAIL", exit 2
  :4, echo "TEST NOTRUN", exit 3
  :5, echo "TEST TIMEOUT", exit 4
  :default, echo "entering default case", echo \v(minput), exit 255
}

Однако minput возвращается до получения одной из строк <--- PNC TESTS STATUS и до 40 секунд. Возвращается через 5 ~ 6 секунд после запуска эльфа.

Полный вывод платы на ее UART выглядит следующим образом: https://pastebin.com/vsps5ZQ1 Она заканчивается правильно с <--- PNC TEST STATUS: PASS

Принимая во внимание, что при захвате выходных данных с помощью приведенного выше сценария он завершается следующим образом: https://pastebin.com/wFSDdn5s Выходные данные показывают, что случай переключения по умолчанию выполняется после захвата строки «0». Он всегда возвращается после строки вида [ 6.099262][usbd:imx ] prime_endpoint: IN endpoint 1 (3) (последняя строка, записанная доской во второй вставке). Я не понимаю, почему происходит последнее.

Если у Kermit есть альтернативы для выполнения того, что я делаю, предложите их мне. Электронная документация для kermit редкая.

Последнее замечание: скрипт запуска ny kermit (~/.kermrc) выглядит следующим образом:

set line /dev/ttyUSB0
set speed 115200
set carrier-watch off
set handshake none
set flow-control none
robust
set file type bin
set file name lit
set rec pack 1000
set send pack 1000
set window 5

1 Ответ

0 голосов
/ 11 января 2019

\v(minput) расширяется до индекса полученной строки, и индексация начинается с нуля. Это означает, что вы должны были написать

minput 40 "<--- PNC TEST STATUS: PASS" "<--- PNC TEST STATUS: INCONCLUSIVE" "<--- PNC TEST STATUS: FAIL" "<--- PNC TEST STATUS: NOTRUN" "<--- PNC TEST STATUS: TIMEOUT"
switch \v(minput) {
  :0, echo "TEST PASS", exit 0
  :1, echo "TEST INCONCLUSIVE", exit 1
  :2, echo "TEST FAIL", exit 2
  :3, echo "TEST NOTRUN", exit 3
  :4, echo "TEST TIMEOUT", exit 4
  :default, echo "entering default case", echo \v(minput), exit 255
}

Что происходит с вашим кодом, так это то, что после получения <--- PNC TEST STATUS: PASS, minput выходит с \v(minput), установленным на 0, а switch соответствует только значению по умолчанию. 0 в вашем выводе - это не полученная строка, это index , как указано для minput.

...