2009-11-02 22 views
7

È possibile ottenere dati di posizione fuori da Google Gears, Google Gelocation API o qualsiasi altra API di posizione Web (ad esempio Fire Eagle) in un formato tale che venga visualizzato da altri software come dispositivo GPS?Emulazione GPS o dispositivo seriale

Mi è capitato di leggere these answers alla mia domanda riguardante il rilevamento della posizione WiFi, su Super User, che se potessi emulare un'unità GPS, molti di questi servizi Web potrebbero agire come un GPS "povero" per altri meno utili software che lo richiede.

È un'opzione GPSD?

Preferibilmente OSX & Python, ma sarei interessato a qualsiasi implementazione.

+0

In assenza di esatte soluzioni Python alla mia domanda, ho iniziato il seguente Progetto su Google Code, dove copierò il codice/l'informazione che trovo: http://code.google.com/p/python-virtualgps/ –

+0

GPSD sono stati spostati in una nuova posizione: https://savannah.nongnu.org/projects/gpsd –

risposta

4

C'è uno very similar thread su una mailinglist Python che menziona Windows virtual COM ports e discute le capacità pseudo-tty di Unix. Se le app che si desidera utilizzare consentono di digitare in un file specifico del dispositivo tty, questa potrebbe essere la via più semplice. (A meno di chiedere agli autori di fornire un'API plugin per quello che stai cercando di fare, o di acquistare uno $20 bluetooth GPS mouse.)

Stai usando OS X?

C'è un progetto macosxvirtualserialport su codice Google che fornisce un wrapper grafico attorno ad alcune delle funzionalità di un'utilità chiamata socat. Ti consiglio di dare un'occhiata a socat se vedi un potenziale nel percorso pseudo-tty. Credo che potresti usare socat per collegare un pipe da un programma Python a uno pseudo-tty.

La maggior parte delle applicazioni Mac native eseguono query su IOServiceMatching per un dispositivo con kIOSerialBSDRS232Type e dubito che una pseudo-tty venga visualizzata come servizio IOKit.

In questo caso, a meno che non sia possibile trovare un progetto che ha già implementato una cosa del genere, sarà necessario implementare un driver come descritto in questo thread How to create virtual COM port. Se hai intenzione di creare un driver di dispositivo, dovresti basarlo su IOKit a causa di quella probabile query IOServiceMatching. Puoi trovare il progetto Apple16X50Serial menzionato in questo post nella parte superiore di Apple's open source code list (vai allo main page e scegli una versione precedente del sistema operativo se desideri scegliere come target qualcosa prima del 10.6).

Se la tua app è più utile con dati in tempo reale (ad esempio l'app RouteBuddy citata nel thread di mailinglist Python can log current positions), allora vorrai recuperare gli aggiornamenti dalle tue fonti web (speriamo che supportino il polling lungo) e convertirli in base NMEA Frasi RMC. Non vuoi farlo dal tuo codice di guida. Invece, dividi il tuo lavoro in parti di kernel-land e user-land che possono comunicare, e metti il ​​meno codice possibile nella parte del kernel.

Se si desidera consentire alle app di leggere e scrivere su questi servizi Web, la soluzione migliore è probabilmente quella di simulare un dispositivo Garmin. Garmin ha più o meno documentato il loro protocollo nel file IntfSpec.pdf incluso con il loro Device Interface SDK. Di nuovo, vorrai dividere il più possibile nel codice dello spazio utente.

Non sono riuscito a trovare un progetto o un'utilità che implementa il lato kernel di un'interfaccia seriale virtuale basata su IOKit, ma sarei sorpreso se non ci fosse uno che si nasconde da qualche parte là fuori. Sfortunatamente, la maggior parte delle risposte che ho trovato a questa domanda erano come questa, con lo sviluppatore che veniva detto di darsi da fare writing a kext.

+0

Alcune cose davvero utili lì, grazie. Sto effettivamente usando OSX (aggiunto i dettagli alla domanda originale). –

+0

Un mouse da $ 20 gps è un buon punto (e un ottimo 'gps di povero-uomo!), Ma il mio obiettivo generale è quello di fornire un "flusso di dati" GPS virtuale da API Web non GPS. –

+0

Per inciso, non mi ero davvero reso conto di quanto fossero economici i dongle GPS adesso: http://www.amazon.co.uk/s/ref=nb_ss_0_6?url=search-alias%3Daps&field-keywords=gps+receiver –

2

Non sono esattamente sicuro di come realizzare ciò che stai chiedendo, ma potrei essere in grado di dare qualche idea su come potresti iniziare per farlo. Ecco qui:

Un dispositivo GPS si presenta alla maggior parte dei sistemi come nient'altro che un dispositivo seriale: a.k una porta COM se si ha a che fare con Windows,/dev/ttySx se si è in * nix. Per definizione, il dovere specifico di una porta seriale è quello di trasmettere i dati attraverso un bus, un blocco alla volta. Quindi, seguirà logicamente che se si desidera emulare la presenza di un dispositivo GPS, è necessario raccogliere i dati che si stanno consumando e inserirli in un flusso che in qualche modo si comporta come una porta seriale attiva.

Ci sono, tuttavia, alcune complicazioni si potrebbe prendere in considerazione:

  • La maggior parte dei dispositivi GPS non solo inviare dati di posizione; ci sono anche informazioni sulle posizioni dei satelliti, sulla qualità delle correzioni, sul rilevamento e così via. Poi di nuovo, nessuno ha fatto alcuna regola dicendo che hai avere per rendere tutti quei dati disponibili. Probabilmente c'è di più in questo, ma ammetterò che ho bisogno di fare più ricerche in questo settore da solo.
  • Non sono sicuro di quanto velocemente è possibile ricevere dati quando si ha a che fare con Google Latitude, ecc., Ma qualsiasi ritardo nella ricezione comporterebbe sicuramente pause visibili nel flusso di dati della "porta seriale". Ancora una volta, questa potrebbe non essere una complicanza così grande come sembra, perché i dispositivi GPS sono comunque in grado di "scoppiare" i dati attraverso il bus, ma sicuramente lo terrei d'occhio. Vuoi assicurarti che ci sia sempre un surplus di dati in arrivo, non una carenza.

Lungo il percorso dovrai anche trasformare le coordinate che ricevi in ​​valide frasi GPS. È possibile trovare le specifiche per questi, ma sicuramente farei amicizia con lo standard NMEA - anche se è uno standard imperfetto, è quello su cui tutti sembrano essere d'accordo.

Spero che questo ti abbia aiutato, almeno un po '. Ci sono altri dettagli specifici del tuo problema che ritieni possano essere utili per rispondere a questa domanda?

+0

Nota anche: non ho molta familiarità con GPSD, ma sì, potrebbe essere un'opzione per te se ho capito bene, dato quello che hai menzionato nella tua domanda. –

+1

Ecco alcuni dettagli: esistono librerie/prodotti esistenti che possono emulare le porte seriali? –

+0

Aggiunti ulteriori dettagli. il mio obiettivo è la domanda originale. –

0

Non ho esaminato molto, ma avete considerato l'utilizzo di Skyhook's SDK? Potrebbe fornirti un po 'di quello che stai cercando. È disponibile per tutti i principali sistemi operativi desktop e mobili.

+0

Skyhook ha un GPS 'virtuale' (scaricabile dopo la registrazione), simile al cancello di Franson GPS ma è solo Windows/mobile –

1

Dai un'occhiata a Franson GPS Gate che ti consente di collegarti a Google Earth tra le altre cose (come la simulazione del GPS e così via). È Windows, però, ma penso che si potrebbe ottenere alcune idee utili da esso.

+0

Questo è esattamente il tipo di cosa che sto cercando, ma idealmente il codice sorgente che realizza esso. Buone cose però :) –

Problemi correlati