ストアアプリからPaSoLiにアクセスできない2017年02月02日 10:38

電子マネービューワーのウィジェットがサービス停止になり、nanacoやWaonの残高確認が面倒になって久しい。アプリを作れないものか、少し調べてみる。

PaSoLi用のAQS

UPnPのアプリと同様、デバイス検索用のAQSを用意して、Watcherで検出を試みる。InterfaceClassGuidには、GUID_DEVINTERFACE_USBを指定。

GetDeviceSelectorの生成するAQS

もともとは、GetDeviceSelectorでベンダIDと製品IDを指定してAQSを生成したが、生成されたAQSでは、デバイスの検出ができない。生成されたAQSを見てみると、Guidが異なる。
※古いデバイス情報を元に生成されたかも

また、UsbVendorIdやUsbProductIdを指定するのもいけない。検出対象を絞り込むために指定したいところだが、指定するとデバイスの検出ができなくなる。ここでは指定できない条件のよう。

CreateWatcher

CreateWatcherの呼び出し部。AQS構文に合致するデバイスを検出すると、RegisterDeviceInfoを呼び出す。

USBデバイスの取得

検出したデバイスについて、FromIdAsyncでUsbDeviceを取り出す部分。

USB用のmanifestの追記

Manifestにデバイスの使用宣言を追加。VSでは編集できないので、notepadで。Class IDはレジストリエディタで確認。

FromIdAsyncの例外

上の赤枠のDeviceInformationのIdを用いて、FromIdAsyncを呼び出すのだが、例外発生。例外コードは、0x80070057。引数の値が範囲外とのこと。

MSDNの文書を探してみると、ストアアプリで使用できるのは、Microsoftの提供するWinusb.sysドライバ管理下のもののみ(「USBデバイスのサポート」の節)。その他のベンダ、この場合、Sonyが提供するドライバでは不可、それが範囲外の意味。

それではと、ドライバの更新で、Winusb.sysに切替を試みるが、Felicaの純正のドライバしか候補に挙がって来ず、断念。実際問題、アプリの利用者にドライバ切り替えて、というのも無理な話。

他社の製品はと、サンワサプライの製品のドライバをダウンロードして、定義ファイルを見てみるが、これも無理な様子。USB接続のFelicaデバイスでは、製品によらず無理そう。

可能性があるのは、Bluetooth接続のPaSoLi。iOS用のアプリしか用意されていないが、接続アプリを書けるかもしれない。価格を考えると、パスケースのnocolyでも買った方が賢明だけど。

NFCポートソフトウェア導入時の例外

なお、NFCポートソフトウェアを導入すると、そちらがUSBデバイスを専用するようで、発生する例外が変わる。ドライバと一緒に導入するケースが多いだろうから、この点でもストアアプリの実現は難しい。

P.S.
SmartCardReaderデバイスとして認識できないか試してみたが、現行のFelicaドライバでは不可。