Portál AbcLinuxu, 5. května 2025 11:48

Dotaz: Detekce modemu UART přes TTY?

18.1.2018 20:54 MilanC | skóre: 16
Detekce modemu UART přes TTY?
Přečteno: 321×
Odpovědět | Admin
Ahoj, mám tento modem M590E u RPI. Cílem je zjistit, jestli tam je nebo není, tj. zkonfigurovat linku, poslat AT a ne/přečíst OK. Zkoušel jsem všechno možné, ale nepovedlo se mi to. Těch způsobů existuje hrozně moc (minicom, stty, atinote, vwdial, skript s exec atd.), zkoušel jsem fakt všelicos.

Kolega (Cčkař) vytvořil binárku, která toto svede. Prý jsou tam nějaká speciální nastavení té komunikace. No nejsem moc cčkař. Přijde mi ale kuli takové banalitě držet další binárku, která má jen tento účel a beztak ji jen volám z jiného bash skriptu, abych zjistil stav. Podle mého pokud to jde v cčku, mělo by to jít přeci i třeba přes stty, tam jde nastavit prakticky vše. Bohužel nejsem cčkař a tu inicializaci z toho kódu moc nechápu.

Byl by někdo tak hodný a zkusil to převést (pokud lze) ze zdrojáku na příkazový řádek?

Source: https://pastebin.com/0ZQvHnCT

Modem je řízený 2 piny, jeden připojuje napájení modulu a druhý dělá jeho reset (to je vidět v kódu + čekání aby se inicializoval).

Předem díky.
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Josef Kufner avatar 18.1.2018 22:13 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Detekce modemu UART přes TTY?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Naopak. Mít na tohle binárku je naprosto v pořádku a správně. Dělat to v shellu by bylo naprosto zvrhlé, pokud by to vůbec šlo. Unix (a tedy i Linux) je právě o jednoúčelových malých nástrojích, které shell jen propojuje dohromady.

Tu binárku by to jen chtělo upravit, aby název zařízení nebyl zakompilován, ale aby ho to dostalo jako argument.
Hello world ! Segmentation fault (core dumped)
18.1.2018 22:29 MilanC | skóre: 16
Rozbalit Rozbalit vše Re: Detekce modemu UART přes TTY?
Děkuji za názor. Já jak nejsem moc cčkař, tak logicky hledám cestu přes bash, perl, python apod. :-) Prostě alternativu, ve které se vyznám. Myslel jsem, že něco takového musí být snadné přepsat. Teď nemyslím to nahazování pinů, napájení/reset, to se řeší stejně jinde, jen tu detekci. Tak pokud není jiná cesta, tak to tak necháme a jen učešeme. :-)
Josef Kufner avatar 18.1.2018 22:31 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Detekce modemu UART přes TTY?
Do Pythony by to přepsat asi šlo, ale nemá to smysl. Pro tento úkol je C ideální jazyk.
Hello world ! Segmentation fault (core dumped)
18.1.2018 23:45 MilanC | skóre: 16
Rozbalit Rozbalit vše Re: Detekce modemu UART přes TTY?
Nakonec se mi to v bashi povedlo takto, na AT to vrací OK. Jestli je to inicializované stejně jak v tom Cčku ale nevím. :)
#!/bin/bash

#AT+CLAC AT command lists all AT commands supported by the mobile

MODEM="/dev/ttyAMA0"

function get_response
{
        local ECHO
        # cat will read the response, then die on timeout
        cat <&5 >$TMP &
        echo "$1" >&5
        # wait for cat to die
        wait $!

        exec 6<$TMP
        read ECHO <&6
        if [ "$ECHO" != "$1" ]
        then
                exec 6<&-
                return 1
        fi

        read ECHO <&6
        read RESPONSE <&6
        exec 6<&-
        return 0
}

TMP="./response"

# Clear out old response
: > $TMP

# Set modem with timeout of 5/10 a second
stty -F "$MODEM" 115200 -echo igncr -icanon onlcr ixon min 0 time 5

# Open modem on FD 5
exec 5<>"$MODEM"


get_response "AT" || echo "Bad response"
RESPONSE=$(cat $TMP)
echo "Response was '${RESPONSE}'"

exec 5<&-
Jendа avatar 18.1.2018 23:28 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: Detekce modemu UART přes TTY?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Neběží ti tam getty nebo konzole kernelu, které si ten port sežerou hned po zavření a proto to s stty nejde?
18.1.2018 23:35 MilanC | skóre: 16
Rozbalit Rozbalit vše Re: Detekce modemu UART přes TTY?
Neběží, toho jsem se zbavil.
18.1.2018 23:48 NN
Rozbalit Rozbalit vše Re: Detekce modemu UART přes TTY?
Odpovědět | | Sbalit | Link | Blokovat | Admin
V Pythonu je potreba obcas vypnout xonxoff.. Pokud rozumis tomu zdrojaku, nemel by jsi mit problem to prepsat do cehokoli.
18.1.2018 23:59 MilanC | skóre: 16
Rozbalit Rozbalit vše Re: Detekce modemu UART přes TTY?
Nerozumím jaký je výsledek té konfigurace portu, myslím ta logika && | apod. Prostě co z toho vypadne.
19.1.2018 10:56 rastos | skóre: 63 | blog: rastos
Rozbalit Rozbalit vše Re: Detekce modemu UART přes TTY?
Odpovědět | | Sbalit | Link | Blokovat | Admin
Prehrýzť sa cez ten C kód som lenivý, ale ja by som urobil toto:
  1. pustil by som ten program pod debuggerom a zastavil ho breakpointom na mieste, kde už sú nastavené na parametre linky
  2. uložil nastavenia cez stty -g < /dev/ttyAMA0
  3. napísal 2-riadkový skript, ktorý tie nastavenia restorne cez stty a zavola chat pre poslanie AT, prečítanie OK
  4. profit?

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.