Хорошо, я почти решил это, но застрял в самом последнем препятствии. Думал, что я покажу, что мне удалось сделать, поскольку это может помочь кому-то другому.
Я нашел this other post на переполнение стека, в котором перечислены 3 возможных способа достижения этого. Я не хотел контролировать gprs с помощью AT-команд, когда PPP (в моем ограниченном опыте) справляется с этим хорошо и легко. RPi имеет только один последовательный порт, поэтому я не мог мультиплексировать несколько последовательных интерфейсов.
Так что, оставив меня с мультиплексированием через один последовательный интерфейс, будем надеяться, что SIM900 поддерживает это. Я нашел here руководство пользователя мультиплексора SIM900, который использует стандарт GSM07.10.
Я не мог найти много информации о том, как настроить мультиплексирование, но в конце концов после копания я нашел документ this на модуле n_gsm в ядре linux. Я могу просто следить за тем, о чем идет речь, но недостаточно, чтобы написать свою собственную программу для настройки ряда виртуальных последовательных портов.
К счастью, после очередной очистки google я обнаружил, что этот экстраординарный джентльмен имеет created a C program, чтобы использовать модуль n_gsm для настройки виртуальных последовательных портов для нас.
Я загрузил, сконфигурировал и построил программу в соответствии с инструкциями и попытался загрузить модуль n_gsm. К сожалению, RPi не включает модуль n_gsm по умолчанию, поэтому мне пришлось идти и строить новое ядро с добавлением n_gsm в качестве модуля. Я следил за instruction на сайте RPi, которые очень хороши.
Для SIM900 мне пришлось сменить строку 322, чтобы удалить &w
конца команды AT+IPR
. Он должен знать выглядеть:
if (send_at_command(serial_fd, "AT+IPR=115200\r") == -1) errx(EXIT_FAILURE, "AT+IPR=115200: bad response");
я также редактировал линию 128 в sleep(1.5)
, прежде чем пытаться прочитать ответ, как это иногда возвращается ошибка, потому что он не получил ответа в срок.
Итак, я запускаю программу cmux (с помощью sudo, так как она должна создавать новые устройства/dev/ttyGSM *), и она запускается через команды AT, устанавливает линейную дисциплину и создает новые виртуальные последовательные устройства, но когда я пытаюсь и открыть последовательный терминал с экраном screen /dev/ttyGSM1 115200
, просто возвращает [screen is terminating]
.
Я сделал sudo fuser /dev/ttyGSM1
, который ничего не возвращал, поэтому никакой другой процесс не использует его.
Я тогда попытался echo AT > /dev/ttyGSM1
, который вернул -bash: /dev/ttyGSM1: Level 2 halted
.
Я не уверен, что это значит и не мог найти информацию об этом сообщении. Может ли это говорить о слое 2 модели OSI a.k.a на уровне канала передачи данных?
Как бы то ни было, так далеко от меня. Я решил поставить его в одну сторону на данный момент и просто использовать NTP, но я надеюсь, что это поможет кому-то другому. Если вы найдете решение этого или можете предложить что-то, что я, возможно, пропустил, пожалуйста, скажите. Благодаря