[MontelLUG] Gpsd su Debian Squeeze
Samuele
samuele.zanin a tiscali.it
Mar 24 Ago 2010 15:47:25 CEST
Premessa: non so se esistono soluzioni migliori. Penso di si. Io non ne
ho trovate. Se le sapete siete invitati a postarle.
Come qualcuno saprà, sono stato costretto qualche tempo fa ad
abbandonare la fida etch per passare alla testing-congelata squeeze.
Ieri sera ho provato a collegare il gps alla squeeze.
Il proverbio dice: chi lascia la strada vecchia per la nuova, sà quel
che perde, ma non sà quel che trova.
Infatti, non funzionava una mazza.
Colpa del bluetooth integrato?
Colpa dei driver inclusi in squeeze?
Colpa del demone gps?
Boh. Inizia la caccia alle streghe.
Dopo avere fatto spezzatino di demoni vari, apparentemente sembra tutto
funzionare.
Premessa, come funziona l'ambaradam.
0) Attraverso hcitool ed hciconfig, si riesce a collegarsi al gps e
sparare il contenuto su /dev/rfcomm0.
A questo punto, è come si avesse il vecchio gps collegato via seriale/usb.
Facendo un bel cat /dev/rfcomm0 si vedono dati venire giù.
1) In linux, esiste un demone gpsd che legge il device a cui è collegato
il gps (/dev/rfcomm0 in questo caso) e spara il contenuto sulla porta
tcp 2947.
2) Facendo un telnet su localhost 2947 e premendo r, dovrebbero venire
fuori i comandi gps.
Io ero nella situazione in cui al punto 2, non accadeva nulla, se non
l'outpudi di una stringa con una formattazione un po' particolare.
{"class":"VERSION","release":"2.95","rev":"2010-07-16T10:05:11","proto_major":3,"proto_minor":3}
C4$$0 xea questa?!?
Va ben, forse avranno fatto che il demone spari fuori qualche
informazione riguardo se stesso.
Guglando, trovo che c'è un comando gpspipe che legge l'output di gpsd.
Oh, questo funziona e spara fuori roba tipo:
$GPGGA,133201,4544.antani,N,01150.supercazzola,E,1,05,2.60,111.50,M,46.345,M,,*4B
$GPRMC,133201,A,4544.antani,N,01150.supercazzola,E,0.0000,0.000,240810,,*2E
$GPGSA,A,3,30,29,31,02,12,,,,,,,,2.9,2.6,2.2*36
$GPGBS,133201,14.74,M,25.41,M,50.64,M*0F
Una lettura alla man page di gpsd e salta fuori l'arcano.
Precisamente dove scrivono:
The GPSD protocol is built on top of JSON, JaveScript Object Notation.
Use of this metaprotocol to pass structured data between daemon and
client avoids the non-extensibility problems of the old protocol, and
permits a richer set of record types to be passed up to clients.
Sti beduini, hanno rifatto il protocollo di comunicazione. Scriverlo a
caratteri cubitali da qualche parte no eh?
Guardo se c'è un'opzione per far sparare fuori al programma i dati nel
formato vecchio.
Io non l'ho trovata.
Ok. E' l'ora dei barbatrucchi.
Posto che gpspipe -r butta fuori l'output come a me serve, se lo sparo
su una connessione tcp sono a posto.
Quindi:
vi /etc/services
alla fine aggiungiamo
antani 1717
vi /etc/inetd.conf
alla fine aggiungiamo
antani stream tcp nowait nobody /gpsmio
vi /gpsmio
con dentro
#!/bin/sh
gpspipe -r
Sono dovuto passare attraverso un file di shell, perché apparentemente,
inetd non mi prendeva i parametri specificati in inetd.conf
/etc/init.d/openbsd-inetd restart
telnet 127.0.0.1 antani
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
netlib_connectsock() returns socket on fd 3
{"class":"VERSION","release":"2.95","rev":"2010-07-16T10:05:11","proto_major":3,"proto_minor":3}
{"class":"DEVICES","devices":[{"class":"DEVICE","path":"/dev/rfcomm0"}]}
{"class":"WATCH","enable":true,"json":false,"nmea":true,"raw":0,"scaled":false,"timing":false}
$GPGGA,133201,4544.2548,N,01150.5411,E,1,05,2.60,111.50,M,46.345,M,,*4B
$GPRMC,133201,A,4544.2548,N,01150.5411,E,0.0000,0.000,240810,,*2E
$GPGSA,A,3,30,29,31,02,12,,,,,,,,2.9,2.6,2.2*36
$GPGBS,133201,14.74,M,25.41,M,50.64,M*0F
^C*
^[^]
telnet> quit
Connection closed.
Sembra andare.
Modifica veloce a kismet per farlo puntare alla porta 1717 invece che
2947 e...
tombola. Funziona. Riporta le coordinate gps giuste.
Maledetti!!!
Ovviamente, visto che ci sono alcuni programmi che non permettono di
cambiare la porta dove vanno a connettersi al demone gps, per fare le
cose per benino bisogna fare in modo che gpsd sia in ascolto su una
porta diversa da 2947, e nel file /etc/services, sostituire 1717 con 2947.
Detto questo, buon tedio a tutti, nella speranza che la calura infernale
che c'è fuori cessi al più presto.
More information about the montellug
mailing list