Jak wysyłać polecenia AT do modemu w systemie Linux?

13

W systemie Linux (Ubuntu) próbuję wysłać polecenia AT do modemu na adres /dev/ttyACM0. Próbowałem to zrobić jako:

sudo socat - /dev/ttyACM0

ale podczas pisania czegokolwiek pojawia się wiersz powtarzający to polecenie (oczekuję, że OK).

Kiedy robię

sudo minicom modem1

wydaje się, że działa. Piszę ATi dostaję OK. Piszę bzdury, dostaję ERROR.

Wydaje się, że modem1dla Minicom jest jakoś skonfigurowany do korzystania z modemu na /dev/ttyACM0.

Jak mogę użyć socat do wysyłania poleceń AT? Czy muszę coś skonfigurować? Może mogę użyć konfiguracji dla modem1Minicom (nie wiem, jak znaleźć / zobaczyć tę konfigurację)?

Dodatkowe informacje

Czy podane socatpolecenie jest poprawne? Czy powinienem grać z niektórymi opcjami? Z -vopcją widzę następujące:

AT
> 2013/10/23 17:10:28.917413  length=3 from=0 to=2
AT
< 2013/10/23 17:10:28.921598  length=3 from=0 to=2
AT
AT
ksjdhfjdgfhjkdfh
> 2013/10/23 17:10:30.244923  length=17 from=3 to=19
ksjdhfjdgfhjkdfh
< 2013/10/23 17:10:30.251383  length=29 from=3 to=31
ksjdhfjdgfhjk\b \bd\b \bf\b \bh\b \b
ksjdhfjdgfhj 

Samo urządzenie ma następujące wyjście dmesg:

[5983726.808063] usb 2-1: USB disconnect, device number 3
[5983730.800021] usb 2-1: new full-speed USB device number 4 using uhci_hcd
[5983730.920014] usb 2-1: device descriptor read/64, error -71
[5983733.629524] usb 2-1: New USB device found, idVendor=0572, idProduct=1329
[5983733.629533] usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[5983733.629539] usb 2-1: Product: USB Modem
[5983733.629544] usb 2-1: Manufacturer: Conexant
[5983733.629549] usb 2-1: SerialNumber: 24680246
[5983733.632673] cdc_acm 2-1:1.0: ttyACM0: USB ACM device

I tty jest skonfigurowany w następujący sposób:

speed 57600 baud; line = 0;
eof = ^A; min = 1; time = 0;
-brkint -icrnl -imaxbel
-opost -onlcr
-isig -icanon -echo -echoe
Alex
źródło
może możesz sprawić, że zaczniesz grać z tymi opcjami TERMIOS, ale nigdy tego nie sprawdziłem.
Alex
Przeszukaj tę stronę internetową, szukając „socat modem” - jest 5 trafień, sprawdź, czy któryś z nich jest pomocny. Nie mam konfiguracji, aby je wypróbować, więc nie mogę naprawdę pomóc poza tym. ( unix.stackexchange.com/search?q=socat+modem )
slm
Wskazówki nie są przydatne. Wydaje mi się, że mam prawdziwy podstawowy problem, ponieważ socat powinien działać. To działało wcześniej. Ale nie wiem na czym polega problem. Czy powyższe polecenie jest prawidłowe, to moje pierwsze pytanie.
Alex

Odpowiedzi:

9

Próbować socat - /dev/ttyUSB2,crnl

Mówi to socat o wysłaniu zwrotu karetki, a także wysuwu wiersza.

Wyjaśnienie - to sięga mrocznych dni elektrycznych maszyn do pisania, gdzie trzeba by powiedzieć mu, aby przewrócił karetkę z powrotem do pozycji 0 na stronie - ergo, powrót karetki - a także nakazał mu przesunąć papier o jedną linię w górę .

Aaron Mason
źródło
5

Najlepszym sposobem wysyłania poleceń AT do modemu w systemie Linux jest użycie programu atinout, który jest napisany wyłącznie w celu wysyłania poleceń AT do modemu z wiersza poleceń.

Możesz go użyć do sprawdzenia, czy modem jest uruchomiony i zrób kopię zapasową książki telefonicznej:

$ atinout - /dev/ttyACM0 ten_first_phonebook_entries.txt <<EOF
at+cscs="UTF-8"
at+cpbs="SM"; +cpbr=1,10
at+cpbs="ME"; +cpbr=1,10
EOF
$

lub dowolne inne rzeczy, do których używasz komend AT.

hlovdal
źródło
4

Natknąłem się na ten post z projektu Chromium, który pokazuje, czego chcesz. Nosi tytuł: Debugowanie modemu komórkowego .

fragment z tej strony

Komunikacja bezpośrednio z modemem za pomocą zestawu poleceń AT

Większość modemów obsługuje polecenia AT sterujące modemem i pytające o informacje. Na urządzeniu Chromium OS z włączonym trybem programisty możesz użyć polecenia socat do komunikacji z modemem. Potrzebujesz urządzenia Chromium OS z zainstalowanym obrazem testowym (lub możesz użyć gmerge socat, jeśli znasz serwer deweloperów). Na przykład:

  • Wpisz CTRL + ALT + T, aby wejść do powłoki poprzeczki.
  • Wpisz shell, aby wejść do powłoki bash.
  • Zastanów się, którego urządzenia USB chcesz używać z: ls / dev / ttyACM * / dev / ttyUSB *
  • Zatrzymaj menedżera modemu, jeśli jest uruchomiony: sudo zatrzymaj menedżera modemu
  • Wpisz sudo socat - / dev / ttyACM1, crnl lub sudo socat - / dev / ttyUSB0, aby komunikować się z modemem.
  • Upewnij się, że modem jest włączony poleceniem: „AT + CFUN = 1”

Na przykład:

    crosh> shell
    chronos@localhost ~ $ sudo stop modemmanager
    chronos@localhost ~ $ ls /dev/ttyACM* /dev/ttyUSB*
    /dev/ttyUSB0 /dev/ttyUSB1 /dev/ttyUSB2
    chronos@localhost ~ $ socat - /dev/ttyUSB1
    ATZ
    OK
    AT+CFUN=1
    OK
    ATI
    Manufacturer: Qualcomm Incorporated
    Model: ......
    Revision:....
    ESN: 0x80d...
    +GCAP: +CIS707A, ....

    chronos@localhost ~ $ 

W zależności od modemu możesz wypróbować różne polecenia AT, np. „AT + CGMI”, „AT + CGSN” itp.

slm
źródło
1
Żadne polecenie AT w ogóle nie działa! To jest mój problem! Czy muszę coś skonfigurować? Czy linia komend jest w porządku? Czy popełniam jakiś wielki błąd?
Alex
@Alex - jak już powiedziałem, nie mam żadnego z tego sprzętu, więc trudno jest ci pomóc poza dostarczeniem takich informacji. Musisz to debugować. Próbowałbym włączać i wyłączać dane urządzenia i sprawdzać, czy są zawieszone, poszukaj informacji w dmesgdzienniku. Przepraszam, nie mogę ci pomóc więcej niż to.
slm
1
Czy nie możesz po prostu powtórzyć „AT + DONTREMEMBERZMODEM”> / dev / modemtty?
mikeserv