![]() |
AW: WiimoteLib.dll in Delphi
In Win7 konnte ich die Wiimote auch leicht verbinden (ohne BlueSoleil), aber keines der Anwendungen (gegal ob .net, c++ oder Delphi und egal ob via HID oder über sonstwie) hat diese Controler nutzen können.
Fast alle Anwendungen erkannten zwar den Controler, aber sie reragierten auf keinerlei Befehle. Bisher hat also nur BlueSoleil funktioniert. Wobei mir dieses auch in Win7 einmal einen Bluescreen verursachte. Ich hab auch gesehn, daß jemand über die neue Windows 7 ![]() (hatte leider den Link nicht gespeichert und dann kam der blaue Bildshirm) |
AW: WiimoteLib.dll in Delphi
Inzwischen bin ich so weit, das ich mit dem MS-Stack der Wiimote etwas senden kann. Nur leider klappt das Empfangen noch nicht.
|
AW: WiimoteLib.dll in Delphi
Was ich auch schade finde.
Überall wird vorwigend auf ![]() [edit] OK, dann isses wohl nicht so schlimm ![]() aber dennoch blöde, daß man, wenn man was via Google und Co. findet, daß man dann Links und vorallem Downlodlinks vorfindet, welche nicht mehr funktionieren. hier noch der Link zum Treiber ... vielleicht kann damit wer was anfangen ![]() PS: WiiLi = Wii+Linux ... aber wer braucht schon Linux, wenn man Windows hat :mrgreen: |
AW: WiimoteLib.dll in Delphi
Liste der Anhänge anzeigen (Anzahl: 1)
So, ich muß (möchte) noch die WiiControl.pas aufräumen, bevor ich diese mal zeige.
Darin 'ne eigene kleine Klasse, welche die HID-Geräte verwaltet, ähnlich dem TJvHidDeviceController. (nur daß ich ohne die JEDI arbeite :oops: ) Etwas, welches die Grundklasse der HID-Geräte darstellt und die ersten Teile des Wii-Controlers und einiger Extender (Nunchuk und Co.), Im Anhang 'ne Test-Anwendung mit nachfolgendem Code. Diese macht das, was sich schon ansteuern läßt ... LEDs und der Vibrator. :stupid: Funktioniert unter WinXP + BlueSoleil, sowie nativ unter Win7 x86 (ohne BlueSoleil). Vielleicht kann's ja schonmal wer ausprobieren, also ob der Teil auch wirklich schon richtig funktioniert. > die LEDs sollten blinken und der Vibrator sollte an und aus gehn.
Delphi-Quellcode:
[add]
Program WiiControlP;
Uses Windows, SysUtils, Forms, Generics.Collections, WiiControl; Procedure OnRecive(Sender: THIDDevice; Const Data; Len: Integer); Var S: String; i: Integer; Begin WriteLn('OnRecive'); WriteLn(' Instance ', Sender.DeviceInfo.Instance); S := ' Data'; For i := 0 to Len - 1 do Begin If i mod 20 = 0 Then Begin WriteLn(S); S := ' '; End Else If i mod 5 = 0 Then S := S + ' '; S := Format('%s %.2x', [S, PByte(@Data)[i]]); End; WriteLn(S); WriteLn; End; Procedure OnError(Sender: TWiiRemoteController; ReportID, ErrorCode: Byte); Begin WriteLn('OnReceptError'); WriteLn(' Instance ', Sender.DeviceInfo.Instance); WriteLn(' ReportID ', Format('$%.2x', [ReportID])); WriteLn(' ErrorCode ', ErrorCode); WriteLn; End; Procedure DeviceChange(Controler: THIDControler); Begin WriteLn('DeviceChange'); WriteLn; End; Procedure DeviceArrival(Controler: THIDControler; Const DeviceInfo: THIDDeviceInfo); Var Device: THIDDevice; Begin WriteLn('DeviceArrival'); WriteLn(' ClassGUID ', GUIDToString(DeviceInfo.ClassGUID)); WriteLn(' Instance ', DeviceInfo.Instance); WriteLn(' Path ', DeviceInfo.Path); WriteLn(' Description ', DeviceInfo.Description); WriteLn(' PhysicalDeviceObject ', DeviceInfo.PhysicalDeviceObject); If Controler.CompareByID(DeviceInfo, WIIMOTE_VENDOR_ID, WIIMOTE_PRODUCT_ID) Then Begin Device := Controler.Arrival(DeviceInfo, TWiiRemoteController); Device.OnRecive := OnRecive; TWiiRemoteController(Device).OnReceptError := OnError; WriteLn(' Arrivaled'); WriteLn(' VendorID ', Format('$%.4x', [Device.VendorID])); WriteLn(' ProductID ', Format('$%.4x', [Device.ProductID])); WriteLn(' ProductStr ', Device.ProductStr); WriteLn(' Version ', Device.Version); WriteLn(' Manufacturer ', Device.Manufacturer); WriteLn(' SerialNumber ', Device.SerialNumber); WriteLn(' Identifier ', Device.Identifier); End; WriteLn; End; Procedure DeviceRemoval(Controler: THIDControler; Const DeviceInfo: THIDDeviceInfo; DeviceObject: THIDDevice); Begin WriteLn('DeviceRemoval'); WriteLn(' ClassGUID ', GUIDToString(DeviceInfo.ClassGUID)); WriteLn(' Instance ', DeviceInfo.Instance); WriteLn(' Path ', DeviceInfo.Path); WriteLn(' Description ', DeviceInfo.Description); WriteLn(' PhysicalDeviceObject ', DeviceInfo.PhysicalDeviceObject); If Assigned(DeviceObject) Then Begin WriteLn(' Arrivaled'); WriteLn(' SerialNumber ', DeviceObject.SerialNumber); WriteLn(' Identifier ', DeviceObject.Identifier); DeviceObject.Free; End; WriteLn; End; Var HIDControler: THIDControler; Report: TWiiReport; Begin Try AllocConsole; Application.Initialize; HIDControler := GlobalHIDControler; HIDControler.RegisterDeviceChangeProc(DeviceChange); HIDControler.RegisterDeviceArrivalProc(DeviceArrival); HIDControler.RegisterDeviceRemovalProc(DeviceRemoval); Repeat Application.ProcessMessages; Sleep(10); TWiiRemoteController(HIDControler.ArrivaledDevice[0]).LEDs := [blRumble, blLED2]; Sleep(200); TWiiRemoteController(HIDControler.ArrivaledDevice[0]).LEDs := [blLED1, blLED4]; Sleep(1000); Report.Clear; Report.ReportID := WII_RID_MODE; Report.Continuous := True; Report.RequestReportID := WII_RECEPT_STATUS; HIDControler.ArrivaledDevice[0].Send(Report, WIIMOTE_BT_REPORT_LEN); Until Application.Terminated; While HIDControler.ArrivaledDeviceCount > 0 do HIDControler.ArrivaledDevice[0].Free; HIDControler.UnregisterDeviceChangeProc(DeviceChange); HIDControler.UnregisterDeviceArrivalProc(DeviceArrival); HIDControler.UnregisterDeviceRemovalProc(DeviceRemoval); Except On E: Exception do WriteLn(E.ClassName, ': ', E.Message); End; End. hab das Ganze mal als eigenständiges Projekt reingestellt ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz