OvrvisionのデモソフトなどがOculus Riftが繋がってない状態で起動するとクラッシュするようだ。
Oculus Riftが繋がっているかどうかちゃんと判定するのって難しくないだろうにと思う。
ということで、Oculus RiftがPCに繋がっているかどうかの判定を実際に自前でソフトを書いてみる。
Oclulus RiftはUSBのHIDデバイスとして認識されているので、特定のVID,PIDのデバイスに対してOpenしてみて、失敗したらOculus Riftが繋がっていないと判定すればいいだけなので簡単だ。
Oculus Rift DK1のVID 0x2833のPID 0x0001で、DK2のPIDは0x0021だった。
USBのHIDデバイスへのアクセスは、昔自分で書いたtiny_hid_dllというライブラリをそのまま使ったら簡単にできた。
ソースコードはこんな感じだ。
#include <windows.h> #include <stdio.h> #include <stdlib.h> #define FUNC __declspec(dllimport) __stdcall extern "C" HANDLE FUNC OpenHidHandle(unsigned short vendor_id, unsigned short product_id); extern "C" void FUNC ReadReport(HANDLE handle,unsigned char *InputReport,int *len); extern "C" void FUNC WriteReport(HANDLE handle,unsigned char *OutputReport, int *len); extern "C" void FUNC CloseHidHandle(HANDLE handle); HANDLE hRsDevHandle; const USHORT VID = 0x2833; // OculusVR const USHORT PID = 0x0001; // DK1 int main( int argc, char *argv[]) { hRsDevHandle = OpenHidHandle(VID,PID); if ( hRsDevHandle == INVALID_HANDLE_VALUE) { printf("device not found."); getchar(); return 1; } CloseHidHandle( hRsDevHandle ); printf("Oculus Rift DK1 found.\n"); getchar(); return 0; }
Oculus Riftの接続確認だけでなく、ジャイロセンサーとかのデータを読み出すのもできるかな?
それもそのうち試してみたい。