![]() |
HID - PS2-Buzzer an PC anschließen
Moin!
Ich habe Buzzer der Playstation 2 an meinem PC angeschlossen um damit ein kleines Musikquiz-Programm zu unterstützen. Das funktioniert soweit auch super, insbesondere dank der HID-Komponente von Robert Marquardt. Nun haben die Buzzer aber auch die Möglichkeit zu leuchten. Und ich bekomme nicht heraus, was ich an die Dinger senden muss, damit das Licht der verschiedenen Buzzer an bzw. aus geht. Ich hab schon mit einer Schleife jeden Wert zwischen $00 und $FF rüber gejagt, aber es herrscht das Schweigen im Walde. Wie man in so ein HID-Device schreibt hab ich aus einem anderen Thema ebenfalls von Rober Marquardt abgekupfert:
Delphi-Quellcode:
Kann mir jemand helfen, damit mir ein Licht aufgeht?
for ch := $00 to $FF do
begin FillChar(Report, SizeOf(Report), 0); // das ist ziemlich aufwaendig dafuer das wir nur eine Usage im Report setzen wollen Report.ReportID := 0; // wir wollen in einen Output-Report schreiben Buzzer.ReportTypeParam := HidP_Output; // das benennt die spezifische Usage die gesetzt werden soll Buzzer.UsagePageParam := HID_USAGE_PAGE_CONSUMER; Buzzer.LinkCollectionParam := $01; // CollectionType=Application Buzzer.UsageParam := HID_USAGE_CONSUMER_CONSUMER_CONTROL; // den Wert setzen (LED Maximum) Buzzer.SetUsageValue(ch, Report, Buzzer.Caps.OutputReportByteLength); // ab damit ans Geraet Buzzer.WriteFile(Report, Buzzer.Caps.OutputReportByteLength, Written); ShowMessage('Gesendet: '+IntToStr(ord(ch))); end; [edit=SirThornberry]Delphi-Tags gesetzt - Mfg, SirThornberry[/edit] |
Re: HID - PS2-Buzzer an PC anschließen
Schick mir doch mal direkt (robert_marquardt at gmx dot de) den Output der Programme UsagesDemo und CollectionDemo fuer dieses Geraet.
Das sind Demos die bei der standalone HID-Komponente dabei sind ( ![]() |
Re: HID - PS2-Buzzer an PC anschließen
Hier der Output von UsagesDemo:
Delphi-Quellcode:
****************************************
"Logitech" "Logitech Buzz(tm) Controller V1" VID=$054C PID=$0002
Input Report Size=5 Output Report Size=7 Feature Report Size=0 Button Input ============ 0) UsagePage: Button ($0009) ReportID: 0 IsAlias: False BitField: 2 LinkCollection: 1 LinkUsage: Undefined ($0000) LinkUsagePage: Generic Desktop ($0001) IsRange: True IsStringRange: False IsDesignatorRange: False IsAbsolute: True UsageMin: 1 UsageMax: 20 StringMin: 0 StringMax: 0 DesignatorMin: 0 DesignatorMax: 0 DataIndexMin: 2 DataIndexMax: 21 1) UsagePage: FF00 ($FF00) ReportID: 0 IsAlias: False BitField: 2 LinkCollection: 1 LinkUsage: Undefined ($0000) LinkUsagePage: Generic Desktop ($0001) IsRange: False IsStringRange: False IsDesignatorRange: False IsAbsolute: True Usage: 1 ($0001) StringIndex: 0 DesignatorIndex: 0 DataIndex: 22 Value Input =========== 0) UsagePage: Generic Desktop ($0001) ReportID: 0 IsAlias: False BitField: 2 LinkCollection: 1 LinkUsage: Undefined ($0000) LinkUsagePage: Generic Desktop ($0001) IsRange: False IsStringRange: False IsDesignatorRange: False IsAbsolute: True HasNull: False BitSize: 8 ReportCount: 1 UnitsExp: 0 Units: 0 LogicalMin: 0 LogicalMax: 255 PhysicalMin: 0 PhysicalMax: 255 Usage: Y Axis ($0031) StringIndex: 0 DesignatorIndex: 0 DataIndex: 0 1) UsagePage: Generic Desktop ($0001) ReportID: 0 IsAlias: False BitField: 2 LinkCollection: 1 LinkUsage: Undefined ($0000) LinkUsagePage: Generic Desktop ($0001) IsRange: False IsStringRange: False IsDesignatorRange: False IsAbsolute: True HasNull: False BitSize: 8 ReportCount: 1 UnitsExp: 0 Units: 0 LogicalMin: 0 LogicalMax: 255 PhysicalMin: 0 PhysicalMax: 255 Usage: X Axis ($0030) StringIndex: 0 DesignatorIndex: 0 DataIndex: 1 Value Output ============ 0) UsagePage: FF00 ($FF00) ReportID: 0 IsAlias: False BitField: 2 LinkCollection: 2 LinkUsage: 0 ($0000) LinkUsagePage: FF00 ($FF00) IsRange: False IsStringRange: False IsDesignatorRange: False IsAbsolute: True HasNull: False BitSize: 8 ReportCount: 7 UnitsExp: 0 Units: 0 LogicalMin: 0 LogicalMax: 255 PhysicalMin: 0 PhysicalMax: 255 Usage: 2 ($0002) StringIndex: 0 DesignatorIndex: 0 DataIndex: 0 Und hier CollectionDemo
Delphi-Quellcode:
HID-Devices
"Logitech Buzz(tm) Controller V1" VID=$054C PID=$0002 UsagePage=Generic Desktop ($0001) Usage=Joystick ($0004) CollectionType=Application ($01) UsagePage=FF00 ($FF00) Usage=0 ($0000) CollectionType=Logical ($02) Value Output: UsagePage=FF00 ($FF00) Usage=2 ($0002) UsagePage=Generic Desktop ($0001) Usage=Undefined ($0000) CollectionType=Logical ($02) Button Input Range: UsagePage=Button ($0009) 1..20 Button Input: UsagePage=FF00 ($FF00) Usage=1 ($0001) Value Input: UsagePage=Generic Desktop ($0001) Usage=Y Axis ($0031) Value Input: UsagePage=Generic Desktop ($0001) Usage=X Axis ($0030) |
Re: HID - PS2-Buzzer an PC anschließen
Mach mal code Tags um die Ausgabe von CollectionDemo, damit die Einrueckung erhalten bleibt.
Taucht das Ding auch bei den Joysticks auf (siehe zugehoeriges Joystick Control Panel)? Der Value Output ist der interessante Teil. leider deklariert er einfach ein array von 7 Bytes die man schreiben kann, nicht was darin enthalten sein muss. Der Input-Teil beschreibt einen einfachen Joystick mit 20 Buttons. Schreibe 8 Bytes mit WriteFile. Das erste Byte muss 0 sein. Die anderen musst du ausprobieren. Mit 0 anfangen und dann nacheinander $FF in die restlichen Bytes duerfte der sinnvollste Ansatz sein. |
Re: HID - PS2-Buzzer an PC anschließen
Ich finde leider kein zugehoeriges Joystick Control Panel...
7 Bytes also, die ich dann also tatsächlich systematisch durchprobieren müsste in einer Schleife ähnlich der obigen? Gibt es da generelle Ausschlußkriterien? Eigentlich braucht das Teil ja nur 8 Befehle: Ein/Aus für 4 verschiedene Lampen... |
Re: HID - PS2-Buzzer an PC anschließen
Probier doch mal SimpleHIDWrite aus. Da kann man die Bytes per Hand eingeben. Die ReportID muss 00 sein.
Da es 7 Bytes sind, vermute ich das man da noch ein paar andere Sachen einstellen kann. Du wirst ja sehen wann die Lampen angehen. Probier nach jedem Schreiben mal die Buttons und die Achsen aus. Vielleicht kann man dann sehen ob es noch andere Einstellungen gibt. Irgendwie sollte sich das Verhalten dann aendern. Ich meinte das normale GameController Control Panel von Windows. |
Re: HID - PS2-Buzzer an PC anschließen
Aaaah!
Die Erleuchtung! Im wahrsten Sinne des Wortes. Es stimmt. Jeweils FF im zweiten bis fünften Kästchen bringt's zum Leuchten, die 00 schaltet es wieder aus. Super! Und nochmals vielen Dank! |
Re: HID - PS2-Buzzer an PC anschließen
Na dann probier noch andere Werte aus, vielleicht kann man ja die Helligkeit steuern.
|
Re: HID - PS2-Buzzer an PC anschließen
So, ich hab's jetzt soweit eingebaut und fertig.
Wen es interessiert: kostenloser Download vom Musikquiz gibt es hier: ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:43 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-2025 by Thomas Breitkreuz