LINUX.ORG.RU

Помогите отослать Ctrl+Z в последовательный порт на модеме.

 , , , ,


1

1

Здравствуйте. Помогите правильно послать Ctrl+Z в последовательный порт на модеме. Есть модем. kernel 3.10 (armv7) Добавил для удобства entware.

Не получается послать Ctrl+Z на терминал модема с самого модема при отправке SMS.

Гуглил, чего только не видел про ^Z, но увы... Толи не высылается, толи неправильно делаю.

Решил спросить. Может, подскажете.

Вот это работает и отправляет SMS:

#!/opt/bin/bash
screen -dmS MODEM001 /dev/coon5 115200
sleep 2
screen -S MODEM001 -X stuff 'AT+CMGF=1\r'
screen -S MODEM001 -X stuff 'AT+CPMS="SM","SM","SM"\r'
screen -S MODEM001 -X stuff 'AT+CNMI=2,1\r'
screen -S MODEM001 -X stuff 'AT+CMGS="+15555432100"\r'
screen -S MODEM001 -X stuff 'SMS test\32'
screen -S MODEM001 -X kill

Но хотелось бы упростить.

А вот это не работает:

#!/opt/bin/bash
echo -e 'AT+CMGF=1\r' > /dev/coon5
echo -e 'AT+CPMS="SM","SM","SM"\r' > /dev/coon5
echo -e 'AT+CNMI=2,1\r' > /dev/coon5
echo -e 'AT+CMGS="+15555432100"\r' > /dev/coon5
echo -e "SMS test\32" > /dev/coon5

Последнее работает правильно ровно до передачи текста Вот это ну никак не работает:

echo -e "SMS test\32" > /dev/coon5
Если перед этой командой открыть через тот же screen этот /dev/coon5 , то он находится в ожидании ввода текста и последующего нажатия Ctrl+Z Интерактивно напечатаешь текст, нажмёшь ^Z и sms-ка уйдёт. А как передать без посредников?


Вообще такие вещи надо делать специальными программами взаимодействия с модемами по скрипту. Например, «chat» из комплекта pppd. Ибо если вы не будете извлекать эти «Ok» из буфера компорта, он просто переполнится и не даст отсылать следующие команды. Заодно получите синхронизацию — посылка новой команды, когда модем будет готов, отослав ответ Ok/ERROR на предыдущую команду.

vodz ★★★★ ()
Ответ на: комментарий от vodz

он просто переполнится и не даст отсылать следующие команды.

Не совсем так. Буфер терминального драйвера не переполнится, он молча зацикливается. А вот насчёт синхронизации - более чем верно. Реакция модема на посылку команды, пока не получен ответ на предыдущую, в общем случае непредсказуема, а задержки по sleep ненадёжны и заметно снижают реактивность.
У 'chat' из pppd есть только маленький недостаток - его буфер для REPORT жёстко прошит в коде как 255-байтный, а этого может не хватить не только для SMS, но и для PDU-кодированного USSD (туда же пишется и заголовок строки лога). Это можно обойти, но скорее Expect окажется удобнее.

ABW ★★★★ ()
Ответ на: комментарий от ABW

К сожалению expect в готовом виде отсутствует. А имеющийся chat действительно отказывается работать с русскими буквами при использовании текстового режима, без перекодировки. Более того, chat из entwarе отрабатывает file-script (-f) как-то по-свойски, но это уже жалобы на доп софт. Да и создание файла отчёта в имеющемся chat... На компе хорошо, а тот, что в модеме - печально. Я всякое пробую. Если вы говорите, что echo нехорошо, то пока остаётся лишь screen.

LaLe ()
Ответ на: комментарий от ABW

Не совсем так. Буфер терминального драйвера не переполнится, он молча зацикливается.

Это буфер UART циклический. А буфер терминала не обязан быть циклическим, он должен просто гасить сигнал CTS и ожидать либо вычитывания буфера либо его очистки ioctl-ами со flush.

У 'chat' из pppd есть только маленький недостаток - его буфер для REPORT жёстко прошит в коде как 255-байтный, а этого может не хватить не только для SMS, но и для PDU-кодированного USSD (туда же пишется и заголовок строки лога). Это можно обойти, но скорее Expect окажется удобнее.

Ну потому я и сделал свою посылалку sms: http://www.simtreas.ru/~dzo/smstools_mi.html

vodz ★★★★ ()
Ответ на: комментарий от LaLe

Если вы говорите, что echo нехорошо, то пока остаётся лишь screen.

Что за чушь. Для задачи посылки SMS существуют куча программ, моя в предыдущем посте.

vodz ★★★★ ()
Ответ на: комментарий от vodz

Программ, извините, для виндовс? Вопрос не о том был как с компьютера на виндовс послать SMS через модем. У меня нет постоянно и с собой компьютера с виндовсом, чтобы использовать одну из многих программ, предложенную вами по ссылке. Скомпилировать её для модема - это тоже будет накладно. Вы там iconv, windows.h притянули. Ко мне оно не влезет. Но всё равно спасибо, хоть и не в кассу ваша чушь.

LaLe ()
Ответ на: комментарий от LaLe

Вы там iconv, windows.h притянули. Ко мне оно не влезет. Но всё равно спасибо, хоть и не в кассу ваша чушь.

Дядя, вы дурак? Как бездарно подставляетесь... Слабо было прочитать первый абзац по ссылке и попытаться откомпилить и запустить под Linux? Может вы еще видели iconv под винду?

vodz ★★★★ ()
Ответ на: комментарий от vodz

Мой дурак тебе в рот не влезет. Вот когда ты, фанат всяких прог, скомпилишь ту хрень, что предлагаешь под арм с размером оставшегося места в 32 Кб, то сплюнь выхода из моего дурака.Понятия не имею про виндовс, это ты нений вендовых штук предложить установить. Не слюнявь сюда, чмо. Вопрос здесь позавчера решили.

LaLe ()
Ответ на: комментарий от LaLe

Вот когда ты, фанат всяких прог, скомпилишь ту хрень, что предлагаешь под арм с размером оставшегося места в 32 Кб

О да....

#!/opt/bin/bash

Ну и эта «хрень» всего 16k и в отличии от — работает.

это ты нений вендовых штук предложить установить

Удивительный идиот, даже с третьего раза нихрена не понял, что так и продолжает обделываться.

vodz ★★★★ ()