USB ansprechen unter Ubuntu per lazarus ?

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
pluto
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)

Beitrag von pluto »

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

Christian
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:

Beitrag von Christian »

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.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
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)

Beitrag von pluto »

Also gut, dann brauchen wir auch erst gar nicht weiter zu reden. Wenn du immer nur sagst das geht nicht. Das Geht ! Wenn es diese hid Komponente von Windows kann geht es.
und zwar mit Interrup. Aber bringt mir das nichts. Es muss doch ein weg geben.
MFG
Michael Springwald

Christian
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:

Beitrag von Christian »

Woher weisst du denn das sie es kann ?
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
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)

Beitrag von pluto »

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 ?
MFG
Michael Springwald

Christian
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:

Beitrag von Christian »

Ist mir jedenfalls nicht mehr geläufig, dann solltest du ja in der Lage sein das auch mit libusb zu machen. Die kann genau das selbe wie deine JVCL Komponente die Windows Version arbeitet sogar exact gleich.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
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)

Beitrag von pluto »

das dachte ich mir auch, doch leider habe ich den Soruce code nicht ganz verstanden,
Wenn die genau gleich arbeiten müsste ich doch mein Beispiel Projekt übernehmen können oder ?
MFG
Michael Springwald

pluto
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)

Beitrag von pluto »

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.

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;
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:
-61\
could not get bound driver: No data availabl
in driver steht nix drin. Oder brauche ich das einfach nicht zu beachten ?
could not get bound driver: No data availabl
die ist mir klar.
MFG
Michael Springwald

Christian
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:

Beitrag von Christian »

dev müsste nil sein wenn die Bedienung schon in benutzung ist...
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
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)

Beitrag von pluto »

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.
MFG
Michael Springwald

Christian
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:

Beitrag von Christian »

Ja es kommt keine Fehlermeldung weil dev nil ist.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
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)

Beitrag von pluto »

? Und warum kommt eine beim zweiten Start ?
wenn ich mit USB_strerror abfrage ?
MFG
Michael Springwald

Christian
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:

Beitrag von Christian »

Der debugger ist erfunden ich kann mir nicht alles aus den Fingern saugen.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
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)

Beitrag von pluto »

Ich nutzt ihn aber nicht. Weil er bei mir nicht läuft.
und ich habe keine lust zu suchen warum er nicht läuft.

Ich mache alles mit writeLn und bestimmten stellen.
MFG
Michael Springwald

Antworten