www.beck-ipc.com
www.beck-ipc.comwww.beck-ipc.com  | ImprintImprint
FAQFAQ  | SearchSearch  |
RegisterRegister   |LoginLogin

USB: Nach einem Request sind die Events blockiert

Questions and discussions about the hardware of the IPC@CHIP® products SC123, SC143, SC23 and SC24.
Hallo Forenteilnehmer,

an einen SC23/SC24 habe ich ein USB-Kühlgerät angeschlossen. Per Polling möchte ich z.B. die aktuelle Temperatur abfragen. Zudem können Parameter wie Alarmtemperatur, Fan-Geschwindigkeit usw. über die Schnittstelle geändert werden. Bei der Programmierung meines Treibers habe ich mich am Beck-Demo-Treiber für USB-Printer orientiert. Leider habe ich bei meinem Treiber Probleme, die ich mit Ihrer/Eurer Hilfe zu bewältigen hoffe.

Was funktioniert:
In meinem (noch rudimentären) Treiber initialisiere ich den SC23/SC24 per usbHostInit(...) und kann per usbHostGetDeviceInfo(...) grundlegende Geräte-Infos ggf. auch wiederholt auslesen, sofern das Kühlgerät angeschlossen ist. Den Treiber kann ich mehrfach starten und beenden, das Kühlgerät entfernen und wieder anschließen - soweit funktioniert der Treiber erwartungsgemäß. Die attach- und detach-events werden in der Callback-Funktion durch printf-logging sichtbat gemacht.

Das Problem:
Analog zur Port-Status-Abfrage aus dem Beck-Demo-Treiber für USB-Printer kann ich die Temperatur mit usbSend(), usbHostIssueToken(USB_SPEC_PID_SETUP) und usbHostIssueToken(USB_SPEC_PID_IN) abfragen. Der Sende- und Empfangs-Event werden von der Callbackfunktion geloggt. Doch die Abfrage funktioniert nur ein einziges Mal. Ich kann allerdings noch weitere usbSend() und USB_SPEC_PID_SETUP-Tokens absenden (Sende-Events werden geloggt), aber es werden keine Daten mehr empfangen. Wird der Treiber neu gestartet, so wird das angeschlossene Kühlgerät nicht mehr erkannt. Entferne ich jetzt das Kühlgerät, so wird kein detach-event geworfen. Erst nach dem Wieder-Anschließen des Kühlgerätes wird ein attach-event gemeldet.

Frage:
Woran kann es liegen, dass nur eine einzige Temperatur-Abfrage getätigt werden kann? Woran liegt es, das ein Request das Gerät oder die Event-Schleife, den Event-Stack o.ä. blockiert?

(Vor einiger Zeit habe ich das Kühlgerät unter Windows7 mit USBPcap und Wireshark analysiert. Falls die pcap-Protokolldatei zur Lösung des Problems beitragen könnte, kann ich bei Bedarf die Protkolldatei zusenden.)

Mit freundlichen Grüßen
Nene

Hallo Nene,

vielleicht können Sie Ihren Code anhängen. Sicherlich kann auch das Capture nicht schaden.
Geben Sie in der Call-back-Funktion alle Events aus? Kommt vielleicht ein Fehler-Event?

Schöne Grüße
Jan Schatz
Software Development
Beck IPC GmbH

Hallo Herr Schatz,

danke für Ihre Reaktion. Das Problem habe ich inzwischen durch Ergänzung eines Acknowledgemets gelöst: Nach den Kommandos (s.o.) habe ich nach dem usbHostIssueToken(USB_SPEC_PID_IN) als Acknowledgement ein usbSend() mit leeren Daten und ein usbHostIssueToken(USB_SPEC_PID_OUT) eingefügt. - Kaum macht man's richtig, schon funktioniert's.

Viele Grüße
Nene

Return to SC1x3/SC2x


Who is online

Users browsing this forum: No registered users and 2 guests


cron