Позвольте призвать вас в этот топик… Я уже все перепробовал, но завести cmux так и не смог.
Единственное, чего добился - если инициализировать SIM900 каким-либо уж очень экзотическим способом (например, выключать flow сontrol), то вместо подвисания приложений, работающих с созданными serial интерфейсами, возвращается ошибка “Level 2 halted”.
Куды бечь?
Это значит, что в коде написана посылка в прибор “AT+IFC=2,2”, что, согласно мануалу, обозначает как раз включение hardware flow control (в сторону DTE и DCE), и я пробовал вместо этого посылать “AT+IFC=0,0”, что должно flow control отключать.
В ходе всяких подобных экспериментов у меня стабильно получается два результата: либо при обращении к /dev/ttyGSM1 все виснет, либо отваливается с “Level 2 halted”
Мистика какая-то Я тоже только что снес на всякий случай пакет с cmux, поставил его заново, и все заработало. Причем, теперь работает и бинарник из пакета, и тот, что лежит на github, и даже тот, что я сам собирал.
С одной стороны - здорово, с другой - печально (непонятно, что это было, и что делать, если случится опять…)
P.S. на всякий случай
AT+CGMR
Revision:1137B04SIM900R32_ST
могу предположить, что это как-то связано с автоматическим определением скорости порта модемом (autobaud). Может быть дело в том, что restart_if_broken отправлет AT команду, синхронизируя скорость на 115200, а прошлый раз вы пробовали просто включать питание.
Перед запуском cmux я всегда делал restart, просто чтобы убедиться, что прибор живой.
В самом cmux.c есть cfset?speed(&tio, LINE_SPEED) на 115200, и после этого в прибор сразу посылается “AAAT” с проверкой ответа - с этим ни разу проблем не было.
Пока оно не работало, я пробовал, в т.ч. посылать “AT+IPR” (этот код в github-овском варианте сейчас закомментирован) - разницы никакой не было.
P.S. Не заметил одного “слона” - после проигрыша битвы с cmux я взялся копать другую тему, и сейчас работаю на самособранном ядре. По-хорошему, надо бы откатиться на то, что было раньше, и проверить с ним, но пока некогда…
Не успел я нарадоваться, что cmux заработал, как обнаружились новые проблемы. При попытке поднять ppp соединение через мультиплексированный терминал, оказалось, что в этом соединении не работает ничего, кроме пингов.
Т.е. подняв ppp over /dev/ttyAPP0 я получаю полноценный интернет, а сделав то же самое через cmux и /dev/ttyGSM[1-3] я получаю нечто, где работают только пинги. ping 8.8.8.8 работает, а wget ya.ru - нет (имя резолвит, а затыкается сразу после отсылки http запроса).
После некоторых экспериментов выяснилось, что и пинги ходят не все. ping -s 88 8.8.8.8 работает, но ругается на truncated:
# ping -s 88 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 88(116) bytes of data.
72 bytes from 8.8.8.8: icmp_req=1 ttl=48 (truncated)
а ping -s 89 8.8.8.8 уже не работает совсем.
P.S. Установка в /etc/ppp/options параметра mtu 128 проблему не решает, и MTU меньше 128 оно поставить не дает…
Опять теряюсь, что с этим можно сделать?..
… а сделать можно следующее: взять исходник (https://github.com/contactless/cmux/blob/master/cmux.c), раскомментировать строку 327, закомментировать строку 328, пересобрать, и использовать именно такой вариант.
С ним ppp-инет через cmux нормально поднимается (причем, с ppp MTU == 1500, хотя пинги с -s больше 172 через такой канал и не пролазят). Даже openvpn поверх него работает…
У меня так и не получилось заставить работать одновременно два порта.
cmux запускается норм. Запускаю подключение к GSM1 - работает. к GSM2 - нет, и еще GSM1 отваливается
AAAT => AAAT OK
AT+IFC=2,2 => AT+IFC=2,2 OK
AT+GMM => AT+GMM +CGMM: MTK2 OK
AT => AT OK
AT+CMUX=0,0,5,255,10,3,30,10,2 => AT+CMUX=0,0,5,255,10,3,30,10,2 OK
Line dicipline set
Created /dev/ttyGSM1
Created /dev/ttyGSM2
Created /dev/ttyGSM3
Created /dev/ttyGSM4
Going to background
root@wirenboard:~# gammu sendsms TEXT +79269005860 -unicode -text ‘Привет’
If you want break, press Ctrl+C…
Sending SMS 1/1…waiting for network answer…OK, message reference=3
root@wirenboard:~# gammu sendsms TEXT +79269005860 -unicode -text ‘Привет2’
No response in specified timeout. Probably phone not connected.
root@wirenboard:~# cat /root/.gammurc