Pythonメーリングリストには、Windows仮想COMポートについて言及し、Unixの疑似tty機能について説明している非常によく似たスレッドがあります。使用するアプリで特定のttyデバイスファイルを入力できる場合は、これが最も簡単な方法です。(作成者に、実行しようとしていることのためのプラグインAPIを提供するように依頼するか、20ドルのBluetooth GPSマウスを購入することはできません。)
OS Xを使用していますか?
Googleコードにプロジェクトmacosxvirtualserialportがあり、 socatと呼ばれるユーティリティのいくつかの機能のグラフィカルラッパーを提供します。pseudo-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は、多かれ少なかれ、デバイスインターフェイスSDKに含まれているIntfSpec.pdfファイルにプロトコルを文書化しています。繰り返しになりますが、できるだけ多くをユーザースペースコードに分割する必要があります。
IOKitベースの仮想シリアルインターフェースのカーネル側を実装するプロジェクトやユーティリティを見つけることができませんでしたが、どこかに隠れているものがなかったら驚きました。残念ながら、その質問に対する私が見つけた答えのほとんどはこのようなもので、開発者はkextを書くのに忙しくするように言われました。