Народ, подскажите пожалуйста возможен ли субж?
Надо из скрипта кидать в модем, подключенный по COM-порту, обычные "AT"-команды и слушать его ответы.
Или тут только C или Perl помогут?
>Народ, подскажите пожалуйста возможен ли субж?
>Надо из скрипта кидать в модем, подключенный по COM-порту, обычные "AT"-команды и
>слушать его ответы.
>Или тут только C или Perl помогут?
Дык просто писать как в файл echo 'smth' > /dev/ttyS0
>>Народ, подскажите пожалуйста возможен ли субж?
>>Надо из скрипта кидать в модем, подключенный по COM-порту, обычные "AT"-команды и
>>слушать его ответы.
>>Или тут только C или Perl помогут?
>
>
>Дык просто писать как в файл echo 'smth' > /dev/ttyS0А ответы модема, как ловить?
>>>Народ, подскажите пожалуйста возможен ли субж?
>>>Надо из скрипта кидать в модем, подключенный по COM-порту, обычные "AT"-команды и
>>>слушать его ответы.
>>>Или тут только C или Perl помогут?
>>
>>
>>Дык просто писать как в файл echo 'smth' > /dev/ttyS0
>
>А ответы модема, как ловить?Утилита chat
>>А ответы модема, как ловить?
>
>Утилита chatОк. Спасибо за совет! Попробую.
Заодно вопрос: какой набор символов в chat-файле будет равносилен посылке в модем сигнала аналогичного Ctrl+Z ?
Мне надо после некоторой AT-команды скармливать модему "символ" Ctrl+Z.
>>>А ответы модема, как ловить?
>>
>>Утилита chat
>
>Ок. Спасибо за совет! Попробую.
>Заодно вопрос: какой набор символов в chat-файле будет равносилен посылке в модем
>сигнала аналогичного Ctrl+Z ?
>Мне надо после некоторой AT-команды скармливать модему "символ" Ctrl+Z.\\ddd - восьмеричный ASCII
>>Мне надо после некоторой AT-команды скармливать модему "символ" Ctrl+Z.
>
>\\ddd - восьмеричный ASCIIСпасибо!
Осталось только узнать какой код у Ctrl+Z :)
>>>Мне надо после некоторой AT-команды скармливать модему "символ" Ctrl+Z.
>>
>>\\ddd - восьмеричный ASCII
>
>Спасибо!
>Осталось только узнать какой код у Ctrl+Z :)cat <<EOF | hd
?<Ctrl-Z>
?EOF/home/chip> cat << EOF | hd
?
?EOF
00000000 0a |.|
00000001
/home/chip>
>>>>Мне надо после некоторой 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
>>>>>Мне надо после некоторой 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
>>>>>>Мне надо после некоторой 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.
>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"
>>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-порт или модем.
поменяй модемы на компах или на третьем компе проверь.
>Вот именно мусор... 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>'ами?
>>Вот именно мусор... 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 изменить
>>>regunkov@roman ~ $ cat<<EOF | hexdump -C
>>>> ?^Z?
>>>> 00000000 3f 1a 3f 0a |?.?.|
>>>00000004
>>>regunkov@roman ~ $
>>>
>>>Значит Ctrl-z это 0x1b.
>>
>>На самом деле 0x1a. :)Мой риспект. ;) Буду внимательнее.
Для настройки серийного порта используйте SETSERIAL(8)