USB ansprechen unter Ubuntu per lazarus ?
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Das ist mir schon klar, aber evlt. könnte man abschauen mit welchen Einstellungen sie arbeitet. Und auch die Übertragungs art ist dort eingetragen nämlich Interrup. Aber das hilft jetzt wenig oder ? Die Frage ist ja: wie lang so ein Signal ist bzw. wie lese ich jetzt z.b. gesendet werden aus?
MFG
Michael Springwald
Michael Springwald
-
- Beiträge: 6079
- Registriert: Do 21. Sep 2006, 07:51
- OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
- CPU-Target: AVR,ARM,x86(-64)
- Wohnort: Dessau
- Kontaktdaten:
Wie soll denn die komponente wissen welche Zugriffsart dein Gerät benutzt ?
Glaub mir doch mal was ich hab bisher 3 USB Geräte entwickelt davon 2 die Geräteklasse HID sind und beide benutzen Bulk Transfers weils sich in manchen Situationen einfach besser handeln lässt. Solang du kein Kommunikationsprotokoll vom Hersteller oder vergleichbare Informationen hast brauchst du gar nicht erst anfangen.
Glaub mir doch mal was ich hab bisher 3 USB Geräte entwickelt davon 2 die Geräteklasse HID sind und beide benutzen Bulk Transfers weils sich in manchen Situationen einfach besser handeln lässt. Solang du kein Kommunikationsprotokoll vom Hersteller oder vergleichbare Informationen hast brauchst du gar nicht erst anfangen.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Ich habe damit unter Delphi ein Projekt erstellt. was meine Signale von der Fernbedinung richtig verstehen konnte, darum.
Unter Windows konnte ich mit meinem Eigenen Programm Winamp per Fernbediegung Fernsteuern !
Aber leider ist es etwas viel code in der Komponente. Ich weiß nicht genau wie sie arbeitet also mit welchen Einstellungen. Ich weiß nur das es damit geklappt hat.
Das Projekt konnte sogar mit zwei verschiedene Fernbediegung umgehen und hat die richtigen Code-Tabellen geladen.
Hatte ich das bis jetzt noch nie erwähnt ?
Unter Windows konnte ich mit meinem Eigenen Programm Winamp per Fernbediegung Fernsteuern !
Aber leider ist es etwas viel code in der Komponente. Ich weiß nicht genau wie sie arbeitet also mit welchen Einstellungen. Ich weiß nur das es damit geklappt hat.
Das Projekt konnte sogar mit zwei verschiedene Fernbediegung umgehen und hat die richtigen Code-Tabellen geladen.
Hatte ich das bis jetzt noch nie erwähnt ?
MFG
Michael Springwald
Michael Springwald
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
Danke diesem Soruce-Code habe ich es ENDLICH geschafft:
http://code.google.com/p/flabbyboxx/sou ... labbybox.c" onclick="window.open(this.href);return false;
Allerdings kommen die Signale sehr langsam an bzw. träge. Ich habe schon die Batterien getauscht oder den relaventen Code in einen Thread ausgelagert.
Der Timer steht auch auf 200. Aber das spielt keine rolle der Timer kann auch auf 1 stehen.
Im c Soruce wird noch geprüft ob die Fernbediegung in Benutzung ist mit
-Enddata aber leider habe ich diese Konstante nicht.
Wenn ich den Empfänger neu rein stecke und meine Anwendung starte kommt keine Fehler Meldung. Aber beim zweiten mal kommt eine.
und zwar aber hier:
e:= usb_get_driver_np(FUsbDevHandle, 0, driver, 20);
Kennt jemand von euch eine Möglichkeit wie ich prüfen könnte ob die Fernbediegung schon benutzt wird ?
Die Fehler Meldungen beim zweiten mal sind:
could not get bound driver: No data availabl
die ist mir klar.
http://code.google.com/p/flabbyboxx/sou ... labbybox.c" onclick="window.open(this.href);return false;
Allerdings kommen die Signale sehr langsam an bzw. träge. Ich habe schon die Batterien getauscht oder den relaventen Code in einen Thread ausgelagert.
Code: Alles auswählen
procedure TForm1.BitBtn1Click(Sender: TObject);
var
dev : pusbdevice;
ret:Integer;
buf:PChar;
r,r2:Integer;
driver:array[0..20] of Char;
s2:Longint;
e:Integer;
MyThread : TMyThread;
begin
dev:=FindDevice;
if dev <> NIL then begin
FusbDevHandle:=usb_open(dev);
if FUsbDevHandle<>nil then begin
driver:='';
e:= usb_get_driver_np(FUsbDevHandle, 0, driver, 20);
writeln(e,'\',driver);
if e > -1 then begin
writeln(usb_detach_kernel_driver_np(FUsbDevHandle, 0));
writeln(usb_set_configuration(FusbDevHandle, 1));
end;
usb_claim_interface(FusbDevHandle, 0);
usb_set_altinterface(FusbDevHandle, 0);
writeln(usb_strerror);
ed:=dev^.config[0].theInterface^.altsetting^.endpoint[0].bEndpointAddress;
Timer1.Interval:=200;
Timer1Timer(Sender);
Timer1.Enabled:=True;
// MyThread := TMyThread.Create(True); // So startet es nicht automatisch
// MyThread.Resume;
// Timer1.Enabled:=True;
end;
end
else
ShowMessage('nicht gefunden')
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if usb_interrupt_read(FUsbDevHandle,
1,
Pchar(b),
8,
200) > -1 then begin
writeln(StrToInt2(b));
Timer1Timer(Sender);
end;
end;
Im c Soruce wird noch geprüft ob die Fernbediegung in Benutzung ist mit
-Enddata aber leider habe ich diese Konstante nicht.
Wenn ich den Empfänger neu rein stecke und meine Anwendung starte kommt keine Fehler Meldung. Aber beim zweiten mal kommt eine.
und zwar aber hier:
e:= usb_get_driver_np(FUsbDevHandle, 0, driver, 20);
Kennt jemand von euch eine Möglichkeit wie ich prüfen könnte ob die Fernbediegung schon benutzt wird ?
Die Fehler Meldungen beim zweiten mal sind:
in driver steht nix drin. Oder brauche ich das einfach nicht zu beachten ?-61\
could not get bound driver: No data availabl
could not get bound driver: No data availabl
die ist mir klar.
MFG
Michael Springwald
Michael Springwald
-
- Lazarusforum e. V.
- Beiträge: 7192
- Registriert: So 19. Nov 2006, 12:06
- OS, Lazarus, FPC: Linux Mint 19.3
- CPU-Target: AMD
- Wohnort: Oldenburg(Oldenburg)
ich prüfe doch schon auf nil:
if dev NIL then begin
also ist es ungleich nil.
Ich meine das so:
Wenn ich das gerät rein stecke dann das Programm starte kommt keine Fehler Meldung.
Beim zweiten Start kommt eine.
Beim Schließen schließe ich auch mit usb_close(FUsbDevHandle);
oder muss ich es noch mit was anders schließen ?
Wie gesagt es geht Trotzdem
Ich glaube ich brauche die Fehler Meldung einfach nicht zu beachten !
Und wie bekomme ich es hin das das Signal Schneller zum ziel kommt ?
Unter Windows habe ich es noch mal Probiert da kommt es sofort und Linux mit der LibUSB kommt es verzögert an bzw. ich muss länger drücken. Liegt das am TimeOut ?
auch wenn ich da 0 hinschreibe kommt es nicht schneller an.
if dev NIL then begin
also ist es ungleich nil.
Ich meine das so:
Wenn ich das gerät rein stecke dann das Programm starte kommt keine Fehler Meldung.
Beim zweiten Start kommt eine.
Beim Schließen schließe ich auch mit usb_close(FUsbDevHandle);
oder muss ich es noch mit was anders schließen ?
Wie gesagt es geht Trotzdem
Ich glaube ich brauche die Fehler Meldung einfach nicht zu beachten !
Und wie bekomme ich es hin das das Signal Schneller zum ziel kommt ?
Unter Windows habe ich es noch mal Probiert da kommt es sofort und Linux mit der LibUSB kommt es verzögert an bzw. ich muss länger drücken. Liegt das am TimeOut ?
auch wenn ich da 0 hinschreibe kommt es nicht schneller an.
MFG
Michael Springwald
Michael Springwald