HidインタフェースによりWindowsパソコンに入力されるデータのダンプソフトを作成しました。PlayStationコントローラ「DUALSHOCK2」を接続してHid入力データをダンプします。
PlayStationコントローラ「DUALSHOCK2」
PlayStationコントローラ「DUALSHOCK2」はwindowsパソコンのUSBに接続するために、次のように「Dingdong PS2 Controller to USB Adapter for Windows PC」を接続します。
Hid入力データダンプソフトの作成
「RapberryPi Zero Wでゲームパッドを作成してパソコンでデータ表示」で作成したゲームパッドデータ入力ソフトを変更してHid入力データダンプソフトを作成します。「MightyDevices/MightyHID」で「MightyHID」のソースコードはそのまま、「MightyHIDTest」のソースコードを次のように書き換えます。
- 実行時の二つのパラメータを与えることができます。最初は接続されたUSB機器のインデックス、二番目は、ダンプするバイト数になります。12-21行目で処理を行い、USB機器のインデックスはリスト化されたUSB機器の「0」からの番号になります。インデックスは「3」、バイト数は「256」がデフォルト値となります。
- 40行目で指定されたUSB機器をopenします。
- 56行目でUSB機器からデータを入力し、58行目でダンプします。
- ソフトの終了はCTRL-Cキーを押してください。
- 前回と同じデータ値の場合、66行目で「*** Same Data ***」を表示します。
HidAnalyzer
using Mighty.HID; using System; using System.Linq; using System.Threading; namespace HidAnalyzer { class Program { static void Main(string[] args) { int usbindex = 3; int datalen = 256; if (args.Length == 2) { } else if(args.Length == 1) { usbindex = Int32.Parse(args[0]); datalen = 256; } Console.WriteLine("List of USB HID devices:"); /* browse for hid devices */ var devs = HIDBrowse.Browse(); /* display VID and PID for every device found */ foreach (var dev in devs) { Console.WriteLine("VID = " + dev.Vid.ToString("X4") + " PID = " + dev.Pid.ToString("X4") + " Product: " + dev.Product); } /* try to connect to first device */ if (devs.Count > 0) { /* new device */ HIDDev dev = new HIDDev(); /* connect */ dev.Open(devs[usbindex]); /* an example of hid report, report id is always located * at the beginning of every report. Here it was set to 0x01. * adjust this report so it does meet your hid device reports */ byte[] report = new byte[256]; byte[] save = new byte[256]; while (true) { report = Enumerable.Repeat<byte>(0xff, report.Length).ToArray(); //for (int i = 0; i < report.Length; i++) report[i] = 0xff; dev.Read(report); Console.WriteLine("\n"); bool resultAB = report.SequenceEqual(save); if (!resultAB) { for (int i = 0; i < datalen; i += 16) { Console.WriteLine("{0:X2} {1:X2} {2:X2} {3:X2} {4:X2} {5:X2} {6:X2} {7:X2} {8:X2} - {9:X2} {10:X2} {11:X2} {12:X2} {13:X2} {14:X2} {15:X2} {16:X2}", i, report[i + 0], report[i + 1], report[i + 2], report[i + 3], report[i + 4], report[i + 5], report[i + 6], report[i + 7], report[i + 8], report[i + 9], report[i + 10], report[i + 11], report[i + 12], report[i + 13], report[i + 14], report[i + 15]); } Array.Copy(report, save, report.Length); } else { Console.WriteLine("*** Same Data ***"); } Thread.Sleep(1000); } } } } }
Hid入力データダンプソフトの実行
Hid入力データダンプソフトを実行すると、コマンドプロンプトに次のようにHid入力データが表示されます。表示されたリストを見ると、PlayStationコントローラ「DUALSHOCK2」がリストの4番目に「PLAYSTATION(R)3 Controller」として表示されています。
List of USB HID devices: VID = 1395 PID = 0025 Product: Sennheiser USB headset VID = 046D PID = C246 Product: G300s Optical Gaming Mouse VID = 08BB PID = 2704 Product: USB Audio DAC VID = 054C PID = 0268 Product: PLAYSTATION(R)3 Controller 00 01 00 00 00 08 00 80 80 - 80 80 00 00 00 00 00 00 10 00 00 00 00 00 00 00 00 - 00 00 00 00 00 03 EF 14 20 00 00 00 00 23 03 77 01 - 00 02 00 02 00 01 80 02 30 00 FF FF FF FF FF FF FF - FF FF FF FF FF FF FF FF 40 FF FF FF FF FF FF FF FF - FF FF FF FF FF FF FF FF 50 FF FF FF FF FF FF FF FF - FF FF FF FF FF FF FF FF 60 FF FF FF FF FF FF FF FF - FF FF FF FF FF FF FF FF 70 FF FF FF FF FF FF FF FF - FF FF FF FF FF FF FF FF 80 FF FF FF FF FF FF FF FF - FF FF FF FF FF FF FF FF 90 FF FF FF FF FF FF FF FF - FF FF FF FF FF FF FF FF A0 FF FF FF FF FF FF FF FF - FF FF FF FF FF FF FF FF B0 FF FF FF FF FF FF FF FF - FF FF FF FF FF FF FF FF C0 FF FF FF FF FF FF FF FF - FF FF FF FF FF FF FF FF D0 FF FF FF FF FF FF FF FF - FF FF FF FF FF FF FF FF E0 FF FF FF FF FF FF FF FF - FF FF FF FF FF FF FF FF F0 FF FF FF FF FF FF FF FF - FF FF FF FF FF FF FF FF 00 01 00 00 00 08 00 80 80 - 80 80 00 00 00 00 00 00 10 00 00 00 00 00 00 00 00 - 00 00 00 00 00 03 EF 14 20 00 00 00 00 23 03 77 01 - 00 02 00 02 00 01 80 02 30 00 01 00 00 00 08 00 80 - 80 80 80 00 00 00 00 00 40 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 03 EF 50 14 00 00 00 00 23 03 77 - 01 00 02 00 02 00 01 80 60 02 00 01 00 00 00 08 00 - 80 80 80 80 00 00 00 00 70 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 03 80 EF 14 00 00 00 00 23 03 - 77 01 00 02 00 02 00 01 90 80 02 00 01 00 00 00 08 - 00 80 80 80 80 00 00 00 A0 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 B0 03 EF 14 00 00 00 00 23 - 03 77 01 00 02 00 02 00 C0 01 80 02 00 01 00 00 00 - 08 00 80 80 80 80 00 00 D0 00 00 00 00 00 00 00 00 - 00 00 00 00 00 00 00 00 E0 00 03 EF 14 00 00 00 00 - 23 03 77 01 00 02 00 02 F0 00 01 80 02 00 FF FF FF - FF FF FF FF FF FF FF FF *** Same Data *** *** Same Data ***