AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Die Delphi-IDE Newbee! Anwendung für USB/HID - startet nicht auf anderem PC
Thema durchsuchen
Ansicht
Themen-Optionen

Newbee! Anwendung für USB/HID - startet nicht auf anderem PC

Offene Frage von "BigWumpus"
Ein Thema von BigWumpus · begonnen am 27. Sep 2007 · letzter Beitrag vom 17. Okt 2007
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von BigWumpus
BigWumpus

Registriert seit: 21. Aug 2007
Ort: Hannover
6 Beiträge
 
#1

Newbee! Anwendung für USB/HID - startet nicht auf anderem PC

  Alt 27. Sep 2007, 21:56
Hallo,
Bin neu bei DELPHI.
Ich habe jetzt eine Anwendung erstellt, die Standards aus dem Delphi-Paket nutzt und eine eigene DLL vom Hersteller.
Per USB soll mit einem HID-Gerät kommuniziert werden.

Hier auf meinem Läppi habe ich es entwickelt und es läuft.

Die EXE und die fremde DLL auf 2 anderen PCs - läuft nicht. - Keine Fehlermeldung!
Das USB-Device wird von WinXP korrekt erkannt und installiert,
meine Anwendung erkennt auch den Connect/Disconnect des HID-Gerätes über einen Event und sendet Daten an das Gerät, welches auch eine Antwort sendet (die Kontroll-LEDs an meinem Gerät zeigen Aktionen). Der PC empfängt diese Daten nicht.

Fehlt da jetzt wieder eine Library ?

Wie gehe ich am besten an so ein Problem ?
Bernd Rüter
Auf die Dauer hilft nur Power !!!
  Mit Zitat antworten Zitat
Benutzerbild von RWarnecke
RWarnecke

Registriert seit: 31. Dez 2004
Ort: Stuttgart
4.408 Beiträge
 
Delphi XE8 Enterprise
 
#2

Re: Newbee! Anwendung für USB/HID - startet nicht auf andere

  Alt 28. Sep 2007, 00:29
Hallo und herzlich willkommen inder Delphi-Praxis,
irgendwie sieht das schon nach einer fehlenden DLL aus. Aber um Dir helfen zu können brauchen wir schon noch ein paar mehr Informationen. Es gibt aber ein Programm, womit Du nachschauen kannst, welche DLL's u.s.w. Dein Programm nutzt. Ich weiß gerade leider den Namen nicht genau.
Rolf Warnecke
App4Mission
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#3

Re: Newbee! Anwendung für USB/HID - startet nicht auf andere

  Alt 28. Sep 2007, 06:53
Das klingt merkwuerdig. Hat das HID-Geraet zusatzliche Treiber oder laeuft es auf den Standard-HID-Treibern?
Was fuer eine Device-Klasse ist es denn? Ich nehme an du benutzt die HID-Komponente. Poste doch mal was du in OnDeviceChange machst.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Newbee! Anwendung für USB/HID - startet nicht auf andere

  Alt 28. Sep 2007, 08:01
Hallo,

remote debugging würde ich da mal empfehlen.
Inwieweit die PR das auch kann, weiss ich nicht.

Ansonstens alles loggen (Textdatei)


Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von BigWumpus
BigWumpus

Registriert seit: 21. Aug 2007
Ort: Hannover
6 Beiträge
 
#5

Re: Newbee! Anwendung für USB/HID - startet nicht auf andere

  Alt 28. Sep 2007, 09:34
Hier mal das Proggi als Quelle.

Das Gerüst wurde mittels EasyHID automatisch erzeugt und ich habe noch etwas "Leben" eingehaucht.


Code:
unit FormMain;

interface

uses
   Windows, Messages, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls,
  ExtDlgs;

const

   // input and out buffer size constants...
   BufferInSize = 32;
   BufferOutSize = 32;
type

   // input and output buffers...
   TBufferIn = array[0..BufferInSize] of char;
   TBufferOut = array[0..BufferOutSize] of char;

   // main form
   TMain = class(TForm)
    Datentext: TMemo;
    Programmname: TLabel;
    ReadButton: TButton;
    LabelConnected: TLabel;
    DeviceLabel: TLabel;
    DeleteButton: TButton;
    SaveButton: TButton;
    SaveDialog: TSaveDialog;
    procedure FormCreate(Sender: TObject);
    procedure FormDestroy(Sender: TObject);
    procedure ReadButtonClick(Sender: TObject);
    procedure DeleteButtonClick(Sender: TObject);
    procedure SaveButtonClick(Sender: TObject);
    private
      FBufferIn:TBufferIn;
      FBufferOut:TBufferOut;
      function USBEvent(var Msg: TMessage): Boolean;
    public
    end;

var
  Main: TMain;

implementation

uses
   cUSBInterface,
   cUSBInterfaceTypes;

const
   // vendor and product ID constants...
   VENDOR_ID          = 6017;
   PRODUCT_ID         = 2000;

{$R *.DFM}

procedure TMain.FormCreate(Sender: TObject);
begin
   Application.HookMainWindow(USBEvent);
   Connect(Application.Handle);
end;

procedure TMain.FormDestroy(Sender: TObject);
begin
   Application.UnHookMainWindow(USBEvent);
end;

procedure TMain.ReadButtonClick(Sender: TObject);
Var DevHandle:cardinal;
begin
   //Buffer löschen
   DatenText.Clear;
   //Daten vom USB-Device abrufen
[...]
   DevHandle := GetHandle(VENDOR_ID, PRODUCT_ID);
   Write(DevHandle,@FBufferOut);
   //Löschen-Knopf aktivieren
   DeleteButton.Enabled := true;
   SaveButton.Enabled := true;
end;

{
****************************************************************************
* Name   : USBEvent                                                      *
* Purpose : DLL message handler hook                                      *
****************************************************************************
}
function TMain.USBEvent(var Msg: TMessage): Boolean;
var
   DevHandle:cardinal;
   USBDatenText:string;
   I: Integer;
begin
   result := False;
   if Msg.Msg = WM_HID_EVENT then
   begin
      case Msg.WParam of

         // a HID device has been plugged in...
         NOTIFY_PLUGGED :
         begin
            // is it our HID device...
            DevHandle := Msg.LParam; // handle of HID device in this message
            if (GetVendorID(DevHandle) = VENDOR_ID) and (GetProductID(DevHandle) = PRODUCT_ID) then
            begin
               //SetReadNotify(DevHandle,true);
               SetReadNotify(DevHandle,true);
[das hier wird durchlaufen]
               LabelConnected.Caption:='connected';
               DeviceLabel.Caption:='?';

[...]
               //Lesen-Knopf aktivieren
               ReadButton.Enabled := true;
            end;
            result := true;
         end;

         // a HID device has been device removed...
         NOTIFY_UNPLUGGED :
         begin
            DevHandle := Msg.LParam; // handle of HID device in this message
            if (GetVendorID(DevHandle) = VENDOR_ID) and (GetProductID(DevHandle) = PRODUCT_ID) then
            begin
               LabelConnected.Caption:='not connected';
               DeviceLabel.Caption:='';
               ReadButton.enabled := false;
               DeleteButton.enabled := false;
            end;
            result := true;
         end;

         // a HID device has been attached or removed. This event is fired after
         // either NotifyPlugged or NotifyUnplugged.
         NOTIFY_CHANGED :
         begin
            // get the handle of the device we are interested in
            // and set it's read notification flag to true...
            DevHandle := GetHandle(VENDOR_ID,PRODUCT_ID);
            SetReadNotify(DevHandle,true);
            result := true;
         end;

         // a HID device has sent some data..
         NOTIFY_READ :
         begin
            DevHandle := Msg.LParam; // handle of HID device in this message
            if (GetVendorID(DevHandle) = VENDOR_ID) and (GetProductID(DevHandle) = PRODUCT_ID) then
            begin
               // read the data - remember that first byte is report ID...
               Read(DevHandle,@FBufferIn);
               case FBufferIn[1] of
                  'T','L':
                  begin
[...]
                  end;
               end;
            end;
            result := true;
         end;
      end;
   end;
end;

end.
Bernd Rüter
Auf die Dauer hilft nur Power !!!
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#6

Re: Newbee! Anwendung für USB/HID - startet nicht auf andere

  Alt 28. Sep 2007, 16:27
Das ist nicht die HID-Komponente, sondern ein "Konkurrenzprodukt". Ich wusste garnicht das es so etwas gibt.
Lade dir mal von http://www.soft-gems.net die HID-Komponente herunter. Solltst du schon die JVCL haben, dann nicht installieren, aber trotzdem herunterladen. Es sind naemlich ein paar praktische Demoprtogramme mit dabei.
Ich schreib dir mal ein Skelettprogramm, wenn ich mich ein bischen besser fuehle.

Auf was fuer Windows-Varianten laeuft denn das Programm?
Die obige Source sieht soweit sauber aus.
  Mit Zitat antworten Zitat
Benutzerbild von BigWumpus
BigWumpus

Registriert seit: 21. Aug 2007
Ort: Hannover
6 Beiträge
 
#7

Re: Newbee! Anwendung für USB/HID - startet nicht auf andere

  Alt 28. Sep 2007, 19:44
Ja,
hatte ich mir auch schon angesehen und für zu aufwendig empfunden.

Das Problem ist ja nur - es läuft auf dem Entwicklungs-PC.
Warum nicht überall ?


Bernd
Bernd Rüter
Auf die Dauer hilft nur Power !!!
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#8

Re: Newbee! Anwendung für USB/HID - startet nicht auf andere

  Alt 29. Sep 2007, 06:24
Bei der HID-Komponente kommt man mit weniger Code aus. Beantworte doch mal die Fragen. Der Unterschied muss in den Rechnern liegen.
  Mit Zitat antworten Zitat
Benutzerbild von BigWumpus
BigWumpus

Registriert seit: 21. Aug 2007
Ort: Hannover
6 Beiträge
 
#9

Re: Newbee! Anwendung für USB/HID - startet nicht auf andere

  Alt 29. Sep 2007, 10:21
Hallo,
Danke erst mal für die Posts.

Hier ein paar Antworten:
Es sind alles Windows XP 32bit-Kisten.
Das Gerät ist ein uC, den ich selbst mit Code versorge. Es werden keine extra-Treiber benötigt, das Gerät wird mit den Standard-HID-Treibern vom Betriebssystem erkannt und unterstützt. Es soll nichts steuern, sondern nur Daten austauschen.
Bernd Rüter
Auf die Dauer hilft nur Power !!!
  Mit Zitat antworten Zitat
Robert Marquardt
(Gast)

n/a Beiträge
 
#10

Re: Newbee! Anwendung für USB/HID - startet nicht auf andere

  Alt 29. Sep 2007, 16:33
Probieren wir es erst mal mit der HID-Komponente.
Delphi-Quellcode:
unit NB5100PMain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, JvComponentBase, JvHidControllerClass, StdCtrls;

type
  TForm1 = class(TForm)
    HidCtl: TJvHidDeviceController;
    Label1: TLabel;
    ListBox1: TListBox;
    procedure HidCtlDeviceChange(Sender: TObject);
    procedure HidCtlDeviceData(HidDev: TJvHidDevice; ReportID: Byte;
      const Data: Pointer; Size: Word);
  public
    Dev: TJvHidDevice;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.HidCtlDeviceChange(Sender: TObject);
begin
  // pruefen ob das bereits benutzte Geraet ausgesteckt wurde
  if Assigned(Dev) and not Dev.IsPluggedIn then
  begin
    // das Geraet zurueckgeben
    HidCtl.CheckIn(Dev);
    Label1.Caption := 'No device';
  end;
  // noch kein Geraet in Benutzung
  if not Assigned(Dev) then
    // pruefen ob die Fernbedienung angesteckt wurde, wenn ja in Benutzung nehmen
    if HidCtl.CheckOutByID(Dev, $147A, $E019) then
    begin
      Label1.Caption := 'Device connected';
      Listbox1.Items.Clear;
    end;
end;

procedure TForm1.HidCtlDeviceData(HidDev: TJvHidDevice; ReportID: Byte;
  const Data: Pointer; Size: Word);
var
  I: Word;
  P: PChar;
  S: string;
begin
  P := Data;
  S := '';
  for I := 0 to Size - 1 do
    S := S + Format('%.2x ', [Cardinal(P[I])]);
  ListBox1.Items.Add(S);
end;

end.
Hier ein Programm fuer das Auslesen einer Fernbedienung. Ich glaube die richtige VID und PID einzusetzen sollte kein Problem sein.
Wenn du nicht die JVCL benutzt, dann JvComponentBase aus dem uses loeschen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:16 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz