|
|
ru.unix.bsd- RU.UNIX.BSD ------------------------------------------------------------------ From : Valentin Nechayev 2:5020/400 09 Mar 2005 00:15:35 To : Dmitry Vinogradov Subject : Re: послать команду модему.. -------------------------------------------------------------------------------- >>> Dmitry Vinogradov wrote: DV>>> Подскажите как послать команду модему. Привычное перенаправление DV>>> # echo atz > /dev/cuaa1 DV>>> не работает.. Hи чего похожего я не нашел. По VN>> А ответ кто будет слушать? VN>> Прежде чем общаться с модемом надо VN>> 1) настроить порт DV> А где, если не секрет? Всю жизнь настраивал только в программах (ppp, DV> mgetty) и ни разу не видел настройку COM-порта DV> отдельно. В ядре тоже нету. Погулил -- нашел только настройки програм. Hа чём собрался общение с портом писать? VN>> 2) понять, что ты будешь делать с ответом DV> Мм.. Ответ не приходит. В Windows я не задумывался что его надо DV> обрабатывать и тут пошел по этому принципу. Попробовал сделать через cat DV> (создал файл с командой и пустой строкой под ней): #cat init > /dev/cuaa1 DV> Конструкция заработала, но.. Срабатывает один раз (приходиться перезагружать DV> модем) и с n-цатьсекундной задержкой. DV> Как я понимаю, модем не знает куда кидать свой вывод? Хуже. Поскольку при закрытии порта DTR падает вниз, модем засыпает. DV>>> # cu -l/dev/cuaa1 -s57600 DV>>> модем адекватно реагирует на команды. VN>> Это просто замечательно!;) А теперь помедитируйте над фактом, что VN>> 1) cu - программа двустороннего обмена, то есть она и передаёт, и VN>> принимает (ну сказали Вы atz, и что? А ответ кто будет слушать?) 2) VN>> она выполняет инициализацию порта 3) она выполняет инициализацию VN>> нужных настроек текущего терминала (поэтому нажимая <Enter> Вы VN>> передаёте модему ожидаемый им CR, а не LF, который передаст команда VN>> echo atz) DV> Т.е., подводя итог, я не могу вот так банально кидать в модем команды и DV> мне нужно для этого дополнительное ПО? Можно общаться даже в шелле, но вначале настроить порт и всё равно будут дикие извраты. Где-то так: DEVICE=/dev/cuaa0 INITDEVICE=/dev/cuaia0 ## подготовить порт к открытию. Для шелла нужен CLOCAL, иначе он не сможет ## открыть порт stty -f $INITDEVICE clocal -crtscts ## Открыть порт exec 3<>$DEVICE ## Передать ATZ printf "ATZ\r" 1>&3 ## Прочитать ответ. Тут надо учесть что обычный ответ на команду - ## \r\nOK\r\n, поэтому делаем в два чтения read DUMMY 0<&3 read REPLY 0<&3 REPLY=`echo -n "$REPLY" | tr -d '\r'` if [ "$REPLY" != "OK" ]; then echo что-то не то; fi Принцип понятен? Тут дурной возни столько, что желательно всё-таки переписывать на более вменяемый язык (Perl, Tcl и так далее). -netch- --- ifmail v.2.15dev5.3 * Origin: Dark side of coredump (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.unix.bsd/2238329cf9e49.html, оценка из 5, голосов 10
|