7
votes

Comment consacrer si une TTY appartenant à un fichier GSM / 3G est un port de données ou de contrôle?

Je suis en train d'écrire un petit outil pour un routeur Linux qui définit une connexion WWAN (GSM / 3G) lorsque je branche un modem approprié dans son port USB. Lorsque l'appareil est branché dans plusieurs TTYS est enregistré et que je maintiens actuellement une liste de fabricants et de périphériques et lequel de leurs TTYS enregistrés est le port de contrôle / de données.

Si possible, je veux vous débarrasser de cette liste et trouver un moyen d'en quelque sorte sonder les TTYS enregistrés directement pour vérifier s'ils sont un port de contrôle ou un port de données.

J'ai examiné le code source de WVDIAL et Modem-Manager pour voir comment ces outils détectent le port droit mais n'ont pas pu trouver d'informations appropriées. J'ai également essayé de rechercher des informations sur SYSFS pour distinguer les ports, mais cela n'a pas réussi non plus.


0 commentaires

3 Réponses :


1
votes

Vous ne pouvez pas détecter cela via des moyens externes. La pratique courante est soit pour configurer les règles UDEV pour un fabricant et un modèle de modem spécifiques. Ou vous pouvez vous connecter séquentiellement à chaque tty et vérifier via à la commande à quel type de port il est.

Dans le cas des règles Udev, vous pouvez suivre ce processus: p>

1) détecter le modem vid et pid 2) Basé sur VID / PID Créer des liens symboliques dans / dev / Serial / BY-ID P>

Par exemple, un modem Sierra Wireless MC8795V avec Vid = 1199 et PID 683C. Je sais que le port 3 est toujours le canal de commande. Par conséquent, vous pouvez créer un lien symbolique fixé avec -at à la fin. P>

dans le cas de la détection via les commandes de la meilleure approche et une approche plus courante consiste à exécuter le commandement à la commande pour voir si le TTY répond à tout. Vous devez obtenir un écho de retour ou un ok si vous avez configuré votre modem ne pas echo. P>

Par exemple: p> xxx pré>

Si vous obtenez une réponse. Vous avez trouvé un port de contrôle ou un port PPP. Pour vérifier cela, exécutez simplement une commande ATI. Si la réponse contient App1, App2, App3, vous avez touché un port PPP. Sinon, vous avez trouvé votre port de contrôle. P>

par exemple A au port de contrôle: p> xxx pré>

par exemple un port PPP: P>

ATI
Sierra Wireless, Incorporated
MC8795V
APP1

OK


0 commentaires

1
votes

J'utilise ce script pour obtenir des ports de données et de contrôle pour 3G USB dongle. xxx pre>

sorties d'échantillons: p>

connecté ZTE MF667 P>

Vendor 1a40, Product 0101 #this is usb hub
Vendor 12d1, Product 1506
usb: /lib/network/wwan/12d1:1506 devicename: 1-1.2
{
        "desc": "Huawei E367/E398",
        "control": 2,
        "data": 0
}}
control_device: /dev/ttyUSB2, data_device: /dev/ttyUSB0


0 commentaires

0
votes

Cela fonctionne pour moi:

for device in $(mmcli -L | grep ModemManager | awk '{print $1}'); do
   cport=$(mmcli -m $device | awk '/primary port:/{ print $NF }' | tr -d \')
   ldevices=($(mmcli -m $device | grep "ports:" | pcregrep -o1 "(\w+) \(at\)"))
   dport=$(echo "/dev/${ldevices[@]##$cport}")
   [ -c $dport ] && echo $dport
done


0 commentaires