GPS またはシリアル デバイスをエミュレートする
-
12-09-2019 - |
質問
位置情報を取得することは可能ですか Google ギア, Google 地理位置情報 API またはその他の Web ロケーション API ( ファイヤーイーグル) 他のソフトウェアに GPS デバイスとして表示されるような形式ですか?
読んでいて思いついた これらの答え スーパー ユーザーでの WiFi 位置検索に関する私の質問に対して、GPS ユニットをエミュレートできれば、これらの Web サービスの多くは、GPS を必要とするあまり役に立たないソフトウェアに対して「貧乏人用」 GPS として機能する可能性があるということです。
は GPSD オプション?
できれば OSX と Python ですが、どのような実装にも興味があります。
解決
があります 非常によく似たスレッド Windows について言及している Python メーリングリストで 仮想COMポート そして、Unix の擬似 tty 機能について説明します。使用したいアプリで特定の tty デバイス ファイルを入力できる場合は、これが最も簡単な方法である可能性があります。(やろうとしていることに対してプラグイン API を提供するように作者に依頼したり、自分でプラグイン API を購入したりする必要はありません) 20ドルのBluetooth GPSマウス.)
OS X を使用していますか?
プロジェクトがあります macosxvirtualserialport と呼ばれるユーティリティの一部の機能のグラフィカルなラッパーを提供する Google コード ソカット. 。疑似 tty ルートに可能性があると思われる場合は、socat を検討することをお勧めします。socat を使用して、Python プログラムから疑似 tty にパイプをリンクできると思います。
ほとんどのネイティブ Mac アプリは、kIOSerialBSDRS232Type を持つデバイスに対して IOServiceMatching をクエリしますが、疑似 tty が IOKit サービスとして表示されるとは思えません。
この場合、そのようなものをすでに実装しているプロジェクトが見つからない限り、この記事で説明されているようにドライバーを実装する必要があります。 仮想COMポートの作成方法 糸。せっかくデバイス ドライバーを作成するのであれば、IOServiceMatching クエリが発生する可能性が高いため、IOKit に基づいてデバイス ドライバーを作成することをお勧めします。この投稿で言及されている Apple16X50Serial プロジェクトは、 Apple のオープンソース コード リスト (に行きます メインページ 10.6 より前のバージョンを対象とする場合は、古い OS リリースを選択してください)。
アプリがリアルタイム データで最も役立つかどうか (例:Python メーリングリストのスレッドで言及されている RouteBuddy アプリ 現在位置を記録できる)その後、Web ソースから更新を取得し(ロングポーリングをサポートしていることが望ましい)、それを基本的なものに変換する必要があります。 NMEA RMC文。これをドライバー コード内から実行する必要はありません。代わりに、作業を通信可能なカーネルランド部分とユーザーランド部分に分割し、カーネル部分に入れるコードはできるだけ少なくしてください。
アプリにこれらの Web サービスへの読み取りと書き込みの両方を許可したい場合、おそらく Garmin デバイスをシミュレートするのが最善の策でしょう。Garmin は、製品に含まれる IntfSpec.pdf ファイルにプロトコルを多かれ少なかれ文書化しています。 デバイスインターフェースSDK. 。繰り返しますが、できる限り多くのコードをユーザー空間コードに分割する必要があります。
IOKit ベースの仮想シリアル インターフェイスのカーネル側を実装するプロジェクトやユーティリティは見つかりませんでしたが、どこかに隠れていなかったら驚くでしょう。残念ながら、その質問に対して私が見つけた答えのほとんどは次のようなもので、開発者は忙しくするように言われました。 ケクストを書いています.
他のヒント
あなたが求めていることをどのように達成するか正確にはわかりませんが、どのようにすればよいかについていくつかの洞察を提供できるかもしれません 始める それを成し遂げるために。したがって、次のようになります。
GPS デバイスは、ほとんどのシステムでは単なるシリアル デバイスとして認識されます (別名 GPS デバイス)。Windows を使用している場合は COM ポート、*nix を使用している場合は /dev/ttySx。定義上、シリアル ポートの特定の役割は、一度に 1 ブロックずつ、バス上でデータをストリーミングすることです。したがって、論理的には、GPS デバイスの存在をエミュレートしたい場合は、消費しているデータを収集し、それをアクティブなシリアル ポートのように機能するストリームに入れる必要があるということになります。
ただし、考慮すべきいくつかの複雑な問題があります。
- ほとんどの GPS デバイスは位置データを送信するだけではありません。衛星の位置、修正品質、方位などに関する情報もあります。繰り返しますが、誰もあなたに言うルールを作ったわけではありません 持っている すべてのデータを利用できるようにするためです。おそらくこれには他にもあると思いますが、この分野については私自身でさらに研究する必要があることを認めます。
- Google Latitude などを扱う場合にどのくらいの速度でデータを受信できるかはわかりませんが、受信に遅延があると、「シリアル ポート」のデータ ストリームに目に見える一時停止が生じることは間違いありません。繰り返しになりますが、GPS デバイスはいずれにしてもバス上でデータを「バースト」することが知られているため、これは見かけほど大きな問題ではないかもしれませんが、私は間違いなくその点に注目していきたいと思います。データが不足するのではなく、常に過剰なデータが提供されるようにしたいと考えています。
途中で、受け取った座標を有効な GPS センテンスに変換する必要もあります。これらの仕様については見つけることができますが、私は間違いなく NMEA 標準を友人にしたいと思います。たとえ欠陥のある標準であっても、とにかく誰もが同意しているようです。
これが少なくとも少しは役に立てば幸いです。この質問に答えるのに役立つと思われる、問題に特有の詳細情報はありますか?