Wir haben folgendes vor: Mittels einer Webcam soll die Kopfpose eines Benutzers ermittelt dadurch dessen Kopfbewegung registriert werden. Wir arbeiten am Algorithmus und würden diesen dann in verschiedenen Szenarien nutzen. Z.B. in einem Computerspiel um damit etwas zu steuern (Kamerarichtung). Nun frage ich mich wie genau wir die Schnittstellen zu den verschiedenen Programmen realisieren sollen?
Angenommen wir hätten gerne dass in einer Rennsimulation der auf dem Monitor (oder Videobrille) angezeigte Bildschirmausschnitt sich mit der Kopfpose mitbewegt, wäre es doch am einfachsten wenn man in den Einstellungen des Videospiels ein weiteres Eingabegerät zur Verfügung hätte? Dadurch müsste man den Sourcecode gar nicht oder nur wenig aufbohren, richtig?
Das bedeutet das Betriebssystem müsste ein weiteres Eingabegerät anbieten und dazu muss ich einen Treiber für den Kernel schrieben? Dieser Treiber enthält den Algorithmus und wäre dann eine Art virtueller Treiber, denn als Eingabe dient ja der Videostream der Webcam.
Ich habe noch nie einen Treiber programmiert und würde gerne wissen ob meine Gedankengänge korrekt sind und ich wirklich einen Treiber programmieren muss. Oder würdet ihr das ganz anders machen?
Treiber programmieren
Treiber programmieren
Bevor Du einen Beitrag postest:
- Kennst Du unsere Verhaltensregeln?
- Hast Du die Suchfunktion benutzt? Deine Frage wurde vielleicht schon in einem anderen Beitrag beantwortet.
- Ist schon ein Artikel in unserem Wiki vorhanden, der Deine Frage beantwortet?
- Kennst Du unsere Verhaltensregeln?
- Hast Du die Suchfunktion benutzt? Deine Frage wurde vielleicht schon in einem anderen Beitrag beantwortet.
- Ist schon ein Artikel in unserem Wiki vorhanden, der Deine Frage beantwortet?
Re: Treiber programmieren
Ich bin auch kein Entwickler, aber würde behaupten, dass Dein Ansatz falsch ist. (Geräte)treiber haben doch einen klar abgegrenzten Aufgabenbereich. Es ist ihre Aufgabe, Hardware über verschiedene Schnittstellen für Anwendungsprogramme zugreifbar zu machen. Das heißt also, sie sind nicht für die Interpretation der vom Gerät geholten Daten zuständig. Das wurde bis jetzt weitestgehend so eingehalten. Ein Kernel-Modul für eine Video-Capture Karte sorgt nur für deren Funktionalität im System - die Daten werden allein von der Anwendersoftware interpretiert/verarbeitet.fabske hat geschrieben:Ich habe noch nie einen Treiber programmiert und würde gerne wissen ob meine Gedankengänge korrekt sind und ich wirklich einen Treiber programmieren muss. Oder würdet ihr das ganz anders machen?
So wie ich das einschätze, ist das Auswerten(!) eines Videosignals eine hoch komplizierte Sache, die sehr viele Ressourcen benötigt. Solch eine Funktionalität gehört klar in die Hardware selbst oder in ein Anwenderprogramm oder Dienst.
Gruß cirrussc
--------------------
„Der Mensch steigert zur Zeit die Nutzung dessen, was seiner Willkür unterliegt - und kommt sich sehr klug dabei vor.“ H. Gruhl
--------------------
„Der Mensch steigert zur Zeit die Nutzung dessen, was seiner Willkür unterliegt - und kommt sich sehr klug dabei vor.“ H. Gruhl
Re: Treiber programmieren
Kenne mich mit der Thematik selbst nicht aus, aber vlt. hilft dieser Link: http://code.google.com/p/linux-track/
Oben gemachte Angaben, Falls nicht anderweitig Erwähnt, beziehen sich auf Debian Stable (Squeeze) amd64.
"Die Einen glauben zu Wissen, die Anderen wissen zu Glauben."
"Die Einen glauben zu Wissen, die Anderen wissen zu Glauben."
- schorsch_76
- Beiträge: 2629
- Registriert: 06.11.2007 16:00:42
- Lizenz eigener Beiträge: MIT Lizenz
Re: Treiber programmieren
Hallo,
das was du programmieren willst ist kein Treiber. Ein Treiber in der ursprünglichen Form ist ein Stück Software das Hardware direkt anspricht und für ein BS ein API zu verfügung stellt.
Was du programmieren willst ist ein Layer zwischen Hardware/Treiber und deiner Software. Jetzt gibt es hier auch zwei verschiedene Möglichkeiten wie das gemacht werden kann:
a) Siehe USB. Es gibt USB Treiber welche die Kommunikation mit dem Bus implementieren und darauf dann Treiber welche bsp. USB Kamera oder USB Sticks betreiben.
Soll deine Software generisch für alle Spiele oder was weis ich verwendet werden können ohne dass die Zielsoftware (Spiel) verändert werden kann, ist so ein Layer in Form eines Treibers nötig. UNter Windows wären das USerMode Treiber. Unter Linux sind auch diese Module Kernel Module ODER als fuse Treiber im Userspace implementiert. Siehe ntfs-3g
b) Als reine Softwareschicht in der spezifischen Anwendung. Dies ist am leichtestetn zu implementieren.
Folgende Links könnten nützlich sein: [1] [2] [3]
Viel Erfolg
schorsch
[1] http://tldp.org/LDP/lkmpg/2.6/html/
[2] http://en.wikipedia.org/wiki/Windows_Us ... _Framework
[3] http://en.wikipedia.org/wiki/Filesystem_in_Userspace
das was du programmieren willst ist kein Treiber. Ein Treiber in der ursprünglichen Form ist ein Stück Software das Hardware direkt anspricht und für ein BS ein API zu verfügung stellt.
Was du programmieren willst ist ein Layer zwischen Hardware/Treiber und deiner Software. Jetzt gibt es hier auch zwei verschiedene Möglichkeiten wie das gemacht werden kann:
a) Siehe USB. Es gibt USB Treiber welche die Kommunikation mit dem Bus implementieren und darauf dann Treiber welche bsp. USB Kamera oder USB Sticks betreiben.
Soll deine Software generisch für alle Spiele oder was weis ich verwendet werden können ohne dass die Zielsoftware (Spiel) verändert werden kann, ist so ein Layer in Form eines Treibers nötig. UNter Windows wären das USerMode Treiber. Unter Linux sind auch diese Module Kernel Module ODER als fuse Treiber im Userspace implementiert. Siehe ntfs-3g
b) Als reine Softwareschicht in der spezifischen Anwendung. Dies ist am leichtestetn zu implementieren.
Folgende Links könnten nützlich sein: [1] [2] [3]
Viel Erfolg
schorsch
[1] http://tldp.org/LDP/lkmpg/2.6/html/
[2] http://en.wikipedia.org/wiki/Windows_Us ... _Framework
[3] http://en.wikipedia.org/wiki/Filesystem_in_Userspace
Re: Treiber programmieren
Vielen Dank schorsch_76 für deinen kompetenten Beitrag! Genau wie du beschrieben hast soll dieser Headtracker als Input-device für alle Anwendungen zur Verfügung stehen. Startet man ein Spiel oder einen Anwendung, so soll man neben Tastatur, Maus, Joypad auch diesen Headtracker auswählen können. Ich muss also ein Kernel-Modul für ein Input-Device programmieren? Dieses Device ist aber kein echter Hardwaretreiber sondern eine Layer zwischen Webcam-Treiber und Anwendungssoftware.
Gibt es nicht bereits eine Art FUSE für Input-Devices was ich nutzen könnte? Oder ein bekanntes Modul welches eine ähnliche Aufgabe hat und ich als Vorlage benutzen könnte?
Gibt es nicht bereits eine Art FUSE für Input-Devices was ich nutzen könnte? Oder ein bekanntes Modul welches eine ähnliche Aufgabe hat und ich als Vorlage benutzen könnte?
Bevor Du einen Beitrag postest:
- Kennst Du unsere Verhaltensregeln?
- Hast Du die Suchfunktion benutzt? Deine Frage wurde vielleicht schon in einem anderen Beitrag beantwortet.
- Ist schon ein Artikel in unserem Wiki vorhanden, der Deine Frage beantwortet?
- Kennst Du unsere Verhaltensregeln?
- Hast Du die Suchfunktion benutzt? Deine Frage wurde vielleicht schon in einem anderen Beitrag beantwortet.
- Ist schon ein Artikel in unserem Wiki vorhanden, der Deine Frage beantwortet?
Re: Treiber programmieren
hi,
sowas ähnliches wie fuse gibt's: The Userspace I/O HOWTO
oder als Vorlage ein Treiber für einen einfachen analogen Joystick?
sowas ähnliches wie fuse gibt's: The Userspace I/O HOWTO
oder als Vorlage ein Treiber für einen einfachen analogen Joystick?
Beware of programmers who carry screwdrivers.