roboforum.ru

Технический форум по робототехнике.

Прошу помощи linux-спецов по sh или awk

Прошу помощи linux-спецов по sh или awk

=DeaD= » 22 янв 2014, 19:12

Прошу помощи linux-спецов по sh или awk

Решаю задачу на OpenWRT (OR-WRT)
Лучше конечно на sh, т.к. сейчас скрипт на нём.

Нужно скинуть "на экран" или в файл или в переменную окружения содержимое входящего буфера /dev/ttyUSB0.

Просто копирование подвешивается навсегда, что и логично :)
Как скопировать до момента, пока там есть данные?

Re: Прошу помощи linux-спецов по sh или awk

hudbrog » 22 янв 2014, 19:27

stty чтобы установить параметры порта, cat чтобы читать с него

Re: Прошу помощи linux-спецов по sh или awk

=DeaD= » 22 янв 2014, 19:35

cat прервется, когда буфер будет пустой в последовательном порту?

Re: Прошу помощи linux-спецов по sh или awk

hudbrog » 22 янв 2014, 19:40

боюсь соврать, стоит проверить на настоящем железе..
есть подозрение что cat может висеть бесконечно (или пока не прийдет SIGHUP).. вполне можно сделать poor man's timeout что-нить типа:
cat /dev/ttyUSB0 > /tmp/somefile &
pid=$!
sleep 5
kill -9 $pid

Ну или можно попробовать какой-нить read с параметром -t... там много вариантом, стоит экспериментировать.. head тоже интересный вариант, если надо прочитать строку

Re: Прошу помощи linux-спецов по sh или awk

=DeaD= » 22 янв 2014, 19:45

Вот какое-то такое увидел в группах гугл, может это чем-то помочь?
Код: Выделить всёРазвернуть
#!/bin/bash

# Port setting
stty -F /dev/ttyS1 raw speed 9600

# Loop
while [ 1 ]; do
        READ=`dd if=/dev/ttyS1 count=1`
        echo $READ
done

Re: Прошу помощи linux-спецов по sh или awk

elmot » 22 янв 2014, 20:17

=DeaD= писал(а):Вот какое-то такое увидел в группах гугл, может это чем-то помочь?
Код: Выделить всёРазвернуть
#!/bin/bash

# Port setting
stty -F /dev/ttyS1 raw speed 9600

# Loop
while [ 1 ]; do
        READ=`dd if=/dev/ttyS1 count=1`
        echo $READ
done

Не думаю.
Вообще ты неправильно к делу подходишь. Читать уарт надо либо до какого-либо символа завершения либо до таймаута. Иначе это все костыли и рейс-кондишены.

Re: Прошу помощи linux-спецов по sh или awk

=DeaD= » 22 янв 2014, 20:27

Да мне бы в STDOUT выплюнуть всё что там есть в буфере и больше пока ничего не надо :)

Re: Прошу помощи linux-спецов по sh или awk

setar » 22 янв 2014, 20:39

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

Re: Прошу помощи linux-спецов по sh или awk

elmot » 22 янв 2014, 20:48

именно. Dead, придумай другой алгоритм.

Re: Прошу помощи linux-спецов по sh или awk

=DeaD= » 22 янв 2014, 21:38

С буфером ясно, спасибо! Это была моя главная ошибка! Сейчас почти получил то, что нужно. Ответ уже получаю.
Только не пойму, почему у меня после ответа контролер сыплет ERR - вроде ничего лишнего ему не высылаю.

Добавлено спустя 10 минут 36 секунд:
Сейчас делаю так:

Код: Выделить всёРазвернуть
#!/bin/sh

echo "Content-type: text/html"
echo
echo "OK"
echo -n "["
cat /dev/ttyUSB0 &
pid=$!
echo "$QUERY_STRING" > "/dev/ttyUSB0"
sleep 1
kill -9 $pid
echo -n "]"


Выдаёт вот что:
Код: Выделить всёРазвернуть
OK
[Drv(100,0)

ERR09 in Drv cmd

ERR09 in Drv cmd

ERR09 in Drv cmd

]


Только "ERR09 in Drv cmd" не 3 раза выводит, а 200 раз :)

Re: Прошу помощи linux-спецов по sh или awk

elmot » 22 янв 2014, 21:43

цепляй другой USB-UART и смотри что туда летит

Re: Прошу помощи linux-спецов по sh или awk

=DeaD= » 22 янв 2014, 22:54

Такое ощущение, что роутер после закрытия порта гадит в /dev/ttyUSB0 :)

Добавлено спустя 1 час 11 минут 3 секунды:
Подцепил второй USB-UART - ничего подобного.
Много думаю, что за ерунда.

Телнетом отправляю команты контроллеру - всё отлично.
Слушаю что пишет роутер - всё отлично.
Связываю их друг с другом - сплошные ошибки :)

Re: Прошу помощи linux-спецов по sh или awk

hudbrog » 22 янв 2014, 23:00

Я бы все же выставил настройки порта с помощью stty... Не из эфира вселенной же он скорость и контроль четности берет...

Re: Прошу помощи linux-спецов по sh или awk

=DeaD= » 22 янв 2014, 23:49

Как и ожидалось - настройки порта не помогли.

Добавлено спустя 22 минуты 44 секунды:
Буду менять подход к задаче, как-то коряво, действительно.

Re: Прошу помощи linux-спецов по sh или awk

linvinus » 23 янв 2014, 10:41

=DeaD=,
мы с dccharacter'ом вот тут forum87/topic10646-960.html#p289779
аналогичную задачу решали

Я лично таким образом дамплю логи с контроллера в файл чтобы потом обработать в gnuplot

В общем случае сначала нужно корректно настроить порт командой stty,
потом синхронизировать буфер, например посылать команду ping и ждать правильного ответа,
потом передавать команды

Ещё можно использовать команду expect

Для отладки можно использовать команду script (http://manpages.ubuntu.com/manpages/har ... ipt.1.html)
пожалуй это тут мало пригодно.


Rambler\'s Top100 Mail.ru counter