Кермит не ждет достаточно долго

Я пишу сценарий 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 ответ

Решение

\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 в вашем выводе не полученная строка, это ее индекс, данный minput,

Другие вопросы по тегам