URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 4640
[ Назад ]

Исходное сообщение
"Работа с модемом из bash скрипта."

Отправлено San , 12-Сен-05 13:59 
Народ, подскажите пожалуйста возможен ли субж?
Надо из скрипта кидать в модем, подключенный по COM-порту, обычные "AT"-команды и слушать его ответы.
Или тут только C или Perl помогут?

Содержание

Сообщения в этом обсуждении
"Работа с модемом из bash скрипта."
Отправлено Niam , 12-Сен-05 15:20 
>Народ, подскажите пожалуйста возможен ли субж?
>Надо из скрипта кидать в модем, подключенный по COM-порту, обычные "AT"-команды и
>слушать его ответы.
>Или тут только C или Perl помогут?


Дык просто писать как в файл echo 'smth' > /dev/ttyS0


"Работа с модемом из bash скрипта."
Отправлено San , 12-Сен-05 15:37 
>>Народ, подскажите пожалуйста возможен ли субж?
>>Надо из скрипта кидать в модем, подключенный по COM-порту, обычные "AT"-команды и
>>слушать его ответы.
>>Или тут только C или Perl помогут?
>
>
>Дык просто писать как в файл echo 'smth' > /dev/ttyS0

А ответы модема, как ловить?


"Работа с модемом из bash скрипта."
Отправлено enot , 12-Сен-05 16:38 
>>>Народ, подскажите пожалуйста возможен ли субж?
>>>Надо из скрипта кидать в модем, подключенный по COM-порту, обычные "AT"-команды и
>>>слушать его ответы.
>>>Или тут только C или Perl помогут?
>>
>>
>>Дык просто писать как в файл echo 'smth' > /dev/ttyS0
>
>А ответы модема, как ловить?

Утилита chat


"Работа с модемом из bash скрипта."
Отправлено San , 12-Сен-05 17:36 
>>А ответы модема, как ловить?
>
>Утилита chat

Ок. Спасибо за совет! Попробую.
Заодно вопрос: какой набор символов в chat-файле будет равносилен посылке в модем сигнала аналогичного Ctrl+Z ?
Мне надо после некоторой AT-команды скармливать модему "символ" Ctrl+Z.


"Работа с модемом из bash скрипта."
Отправлено enot , 12-Сен-05 18:28 
>>>А ответы модема, как ловить?
>>
>>Утилита chat
>
>Ок. Спасибо за совет! Попробую.
>Заодно вопрос: какой набор символов в chat-файле будет равносилен посылке в модем
>сигнала аналогичного Ctrl+Z ?
>Мне надо после некоторой AT-команды скармливать модему "символ" Ctrl+Z.

\\ddd  - восьмеричный ASCII


"Работа с модемом из bash скрипта."
Отправлено San , 12-Сен-05 19:38 
>>Мне надо после некоторой AT-команды скармливать модему "символ" Ctrl+Z.
>
>\\ddd  - восьмеричный ASCII

Спасибо!
Осталось только узнать какой код у Ctrl+Z :)


"Работа с модемом из bash скрипта."
Отправлено chip , 12-Сен-05 20:08 
>>>Мне надо после некоторой AT-команды скармливать модему "символ" Ctrl+Z.
>>
>>\\ddd  - восьмеричный ASCII
>
>Спасибо!
>Осталось только узнать какой код у Ctrl+Z :)

cat <<EOF | hd
?<Ctrl-Z>
?EOF

/home/chip> cat << EOF | hd
?
?EOF
00000000  0a                                                |.|
00000001
/home/chip>


"Работа с модемом из bash скрипта."
Отправлено San , 13-Сен-05 10:44 
>>>>Мне надо после некоторой AT-команды скармливать модему "символ" Ctrl+Z.
>>>
>>>\\ddd  - восьмеричный ASCII
>>
>>Спасибо!
>>Осталось только узнать какой код у Ctrl+Z :)
>
>cat <<EOF | hd
>?<Ctrl-Z>
>?EOF
>
>/home/chip> cat << EOF | hd
>?
>?EOF
>00000000  0a          
>          
>          
>          
>     |.|
>00000001
>/home/chip>

Увы. "0a" это LF, а не Ctrl-Z


"Работа с модемом из bash скрипта."
Отправлено chip , 13-Сен-05 11:23 
>>>>>Мне надо после некоторой AT-команды скармливать модему "символ" Ctrl+Z.
>>>>
>>>>\\ddd  - восьмеричный ASCII
>>>
>>>Спасибо!
>>>Осталось только узнать какой код у Ctrl+Z :)
>>
>>cat <<EOF | hd
>>?<Ctrl-Z>
>>?EOF
>>
>>/home/chip> cat << EOF | hd
>>?
>>?EOF
>>00000000  0a          
>>          
>>          
>>          
>>     |.|
>>00000001
>>/home/chip>
>
>Увы. "0a" это LF, а не Ctrl-Z

http://www.jimprice.com/jim-asc.htm


"Работа с модемом из bash скрипта."
Отправлено regunkov , 14-Сен-05 14:08 
>>>>>>Мне надо после некоторой AT-команды скармливать модему "символ" Ctrl+Z.
>>>>>
>>>>>\\ddd  - восьмеричный ASCII
>>>>
>>>>Спасибо!
>>>>Осталось только узнать какой код у Ctrl+Z :)
>>>
>>>cat <<EOF | hd
>>>?<Ctrl-Z>
>>>?EOF
>>>
>>>/home/chip> cat << EOF | hd
>>>?
>>>?EOF
>>>00000000  0a          
>>>          
>>>          
>>>          
>>>     |.|
>>>00000001
>>>/home/chip>
>>
>>Увы. "0a" это LF, а не Ctrl-Z
>
>http://www.jimprice.com/jim-asc.htm

Правильно было сделать так:

cat<<EOF | hexdump -C
?<Ctrl-v><Ctrl-z>?<Enter>
<Ctrl-d>

regunkov@roman ~ $ cat<<EOF | hexdump -C
> ?^Z?
> 00000000  3f 1a 3f 0a                                       |?.?.|
00000004
regunkov@roman ~ $

Значит Ctrl-z это 0x1b.


"Работа с модемом из bash скрипта."
Отправлено San , 21-Сен-05 10:05 
>regunkov@roman ~ $ cat<<EOF | hexdump -C
>> ?^Z?
>> 00000000  3f 1a 3f 0a                                       |?.?.|
>00000004
>regunkov@roman ~ $
>
>Значит Ctrl-z это 0x1b.

На самом деле 0x1a. :)
Только вот обнаружилась очень неприятная вещь. Два идентичных компа, два идентичных дистрибутива линуха RHEL4. На одном echo "ati" > /dev/ttyS0 проходит нормально, а на втором - как повезет. Или в порт пихается аж три копии "ati", или вообще какой-то мусор непонятный. Причем все непостоянно и меняется по непонятным причинам. Может и одна команда пройти, а может мусор. Бред какой-то.
Причем если работать с портом с помощью "cu -l /dev/ttyS0", то никакого двоения-троения и мусора нет. Все чинно и прилично.
Вопрос: можно ли как-нибудь работать НЕИНТЕРАКТИВНО с командой "cu"?
Ну, то есть скармливать ей команды не с клавиатуры, а например, из текстового файла? A-la "echo "ati" > cu -l /dev/ttyS0"


"Работа с модемом из bash скрипта."
Отправлено enot , 21-Сен-05 13:56 
>>regunkov@roman ~ $ cat<<EOF | hexdump -C
>>> ?^Z?
>>> 00000000  3f 1a 3f 0a                                       |?.?.|
>>00000004
>>regunkov@roman ~ $
>>
>>Значит Ctrl-z это 0x1b.
>
>На самом деле 0x1a. :)
>Только вот обнаружилась очень неприятная вещь. Два идентичных компа, два идентичных дистрибутива линуха RHEL4. На одном echo "ati" > /dev/ttyS0 проходит нормально, а на втором - как повезет. Или в порт пихается аж три копии "ati", или вообще какой-то мусор непонятный. Причем все непостоянно и меняется по непонятным причинам. Может и одна команда пройти, а может мусор. Бред какой-то.
>Причем если работать с портом с помощью "cu -l /dev/ttyS0", то никакого
>двоения-троения и мусора нет. Все чинно и прилично.
>Вопрос: можно ли как-нибудь работать НЕИНТЕРАКТИВНО с командой "cu"?
>Ну, то есть скармливать ей команды не с клавиатуры, а например, из текстового файла? A-la "echo "ati" > cu -l /dev/ttyS0"

Вот именно мусор... cu инициализирует порт, сбрасывает буфера и мусор
фильтрует...

Можно, есть expect (не уверен в названии) утилита позволяющая превратить интерактивные проги в неинтерактивные. Как раз для таких случаев.

Если только на втором такое, то возможно палённый com-порт или модем.
поменяй модемы на компах или на третьем компе проверь.


"Работа с модемом из bash скрипта."
Отправлено San , 22-Сен-05 11:27 
>Вот именно мусор... cu инициализирует порт, сбрасывает буфера и мусор
>фильтрует...
>
>Можно, есть expect (не уверен в названии) утилита позволяющая превратить интерактивные проги
>в неинтерактивные. Как раз для таких случаев.
>
>Если только на втором такое, то возможно палённый com-порт или модем.
>поменяй модемы на компах или на третьем компе проверь.

Разница там в параметрах портов.
Вот результат "stty -F /dev/ttyS0 -a" на ПРАВИЛЬНОМ компе, где все ок:
------------------------
speed 19200 baud; rows 0; columns 0; line = 0;
intr = <undef>; quit = <undef>; erase = <undef>; kill = <undef>; eof = <undef>; eol = <undef>; eol2 = <undef>; start = <undef>;
stop = <undef>; susp = <undef>; rprnt = <undef>; werase = <undef>; lnext = <undef>; flush = <undef>; min = 1; time = 1;
-parenb -parodd cs8 hupcl -cstopb cread clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl ixon ixoff -iuclc -ixany -imaxbel
-opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
-isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase -tostop -echoprt -echoctl -echoke
------------------------

А вот - на неправильном:
------------------------
speed 9600 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; start = ^Q; stop = ^S; susp = ^Z;
rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 1;
-parenb -parodd cs8 hupcl -cstopb cread clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl ixon ixoff -iuclc -ixany -imaxbel
-opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
-isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke
------------------------

Вопрос: как бы эти "intr", "quit", "erase" и т.д. сбросить в <undef> ?
И кто вообще их сделал не <undef>'ами?


"Работа с модемом из bash скрипта."
Отправлено enot , 22-Сен-05 14:20 
>>Вот именно мусор... cu инициализирует порт, сбрасывает буфера и мусор
>>фильтрует...
>>
>>Можно, есть expect (не уверен в названии) утилита позволяющая превратить интерактивные проги
>>в неинтерактивные. Как раз для таких случаев.
>>
>>Если только на втором такое, то возможно палённый com-порт или модем.
>>поменяй модемы на компах или на третьем компе проверь.
>
>Разница там в параметрах портов.
>Вот результат "stty -F /dev/ttyS0 -a" на ПРАВИЛЬНОМ компе, где все ок:
>
>------------------------
>speed 19200 baud; rows 0; columns 0; line = 0;
>intr = <undef>; quit = <undef>; erase = <undef>; kill = <undef>; eof = <undef>; eol = <undef>; eol2 = <undef>; start = <undef>;
>stop = <undef>; susp = <undef>; rprnt = <undef>; werase = <undef>; lnext = <undef>; flush = <undef>; min = 1; time = 1;
>-parenb -parodd cs8 hupcl -cstopb cread clocal -crtscts
>-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl ixon ixoff -iuclc
>-ixany -imaxbel
>-opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0
>vt0 ff0
>-isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase -tostop -echoprt -echoctl
>-echoke
>------------------------
>
>А вот - на неправильном:
>------------------------
>speed 9600 baud; rows 0; columns 0; line = 0;
>intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; start = ^Q; stop = ^S; susp = ^Z;
>rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O;
>min = 1; time = 1;
>-parenb -parodd cs8 hupcl -cstopb cread clocal -crtscts
>-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl ixon ixoff -iuclc
>-ixany -imaxbel
>-opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0
>vt0 ff0
>-isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase -tostop -echoprt echoctl
>echoke
>------------------------
>
>Вопрос: как бы эти "intr", "quit", "erase" и т.д. сбросить в <undef> ?
>И кто вообще их сделал не <undef>'ами?


Ага, первая строка, скорости разные... остальное мона той же stty изменить


"Работа с модемом из bash скрипта."
Отправлено regunkov , 10-Окт-05 12:32 
>>>regunkov@roman ~ $ cat<<EOF | hexdump -C
>>>> ?^Z?
>>>> 00000000  3f 1a 3f 0a                                       |?.?.|
>>>00000004
>>>regunkov@roman ~ $
>>>
>>>Значит Ctrl-z это 0x1b.
>>
>>На самом деле 0x1a. :)

Мой риспект. ;) Буду внимательнее.
Для настройки серийного порта используйте SETSERIAL(8)