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 ***