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