Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi HID - PS2-Buzzer an PC anschließen (https://www.delphipraxis.net/91763-hid-ps2-buzzer-pc-anschliessen.html)

magicsnail 9. Mai 2007 14:03


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:
      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;
Kann mir jemand helfen, damit mir ein Licht aufgeht?

[edit=SirThornberry]Delphi-Tags gesetzt - Mfg, SirThornberry[/edit]

Robert Marquardt 9. Mai 2007 14:14

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 (http://www.soft-gems.net/). Die JVCL hat die Beispiele nicht dabei.

magicsnail 11. Mai 2007 12:54

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)

Robert Marquardt 11. Mai 2007 13:23

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.

magicsnail 11. Mai 2007 13:39

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

Robert Marquardt 11. Mai 2007 13:46

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.

magicsnail 11. Mai 2007 13:59

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!

Robert Marquardt 11. Mai 2007 14:03

Re: HID - PS2-Buzzer an PC anschließen
 
Na dann probier noch andere Werte aus, vielleicht kann man ja die Helligkeit steuern.

magicsnail 23. Mai 2007 09:42

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: Musikquiz-Download


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