Probleme mit FX2 unter C: USBDevice->DeviceCount()

OP #883303
Lesenswert?

Hallo,

Ich versuche zu lernen wie man den FX2 unter C anspricht. Leider 
funktionieren schon die einfachsten Sachen nicht. Ich will einfach nur 
ein Device öffnen oder die Anzahl der Devices abfragen. Beides schlägt 
Fehl.

Der FX2 ist im Gerätemanager vorhanden. Auch über das Tool von Cypress 
lässt er sich ansprechen. Der Code funktioniert nicht egal ob ich keine 
firmware auf den FX2 lade oder eine beliebige funktionierende Firmware 
lade. DeviceCount liefert immer 0 dementsprechend kann auch kein device 
geöffnet werden.

1
 #include "stdafx.h" 
2
 #include <stdio.h> 
3
  
4
 #include <windows.h> 
5
 #include "cyapi.h"  
6
  
7
 int main(int argc, char* argv[]) 
8
 { 
9
      char achBuffer[100]; 
10
      int i; 
11
       
12
      CCyUSBDevice *USBDevice =  new CCyUSBDevice();  
13
  
14
     //  Attempt to open device #0  
15
      
16
      i=USBDevice->DeviceCount(); 
17
  
18
      sprintf(achBuffer, "Anzahl Devices: %d", i); 
19
     MessageBox(NULL, achBuffer, "Ausgabe", MB_OK); 
20
  
21
  
22
     if (USBDevice->DeviceCount()  && !USBDevice->Open(0)) {   
23
            
24
         USBDevice->Reset();  
25
         USBDevice->Open(0);  
26
     } 
27
  
28
     if (! USBDevice->IsOpen()) { 
29
           printf( "Fail\n"); 
30
      } else { 
31
           printf("open OK\n"); 
32
      }   
33
       
34
       
35
      return 0; 
36
 }


Da ich erst mal nur Konsolen Programme schreibe habe ich mal das 
erzeugen des Objektes durch
1
GUID guid;// = IIDFromString("{0C1D1055-0ACF-4800-8E79-DB09641464CF}");
2
  IIDFromString(OLESTR("{0C1D1055-0ACF-4800-8E79-DB09641464CF}"),&guid);
3
    CCyUSBDevice *USBDevice = new CCyUSBDevice(NULL, guid); // Does not register for PnP events
ersetzt.

Seit dem erhalte ich beim Compilieren die Warnung:
LINK : warning LNK4098: defaultlib "LIBCMT" conflicts with use of other 
libs; use /NODEFAULTLIB:library

Komisch finde ich auch irgendwie dass die Funktion StringToGuid aus der 
Doku zur lib:
UID  guid = StringToGUID("{BE18AA60-7F6A-11d4-97DD-00010229B959}");
nicht funktioniert. Sie taucht in der ganzen Doku nur in dem einen 
Beispiel auf und ist auch Leuten die sich deutlich besser mit C 
auskennen als ich nicht bekannt.

Was läuft bei mir Falsch??

Viele Grüße,

Christian
#883667
Lesenswert?

naja, ich denk mal, der hat keine oder eine falsche Treiber-GUID. Du 
kannst dir mit dem GUID-Generator von Visual Studio eine erstellen, der 
gibt das auch gleich noch in dem passenden Format für die Header-Datei 
aus. Bei mir hat das bestens geklappt. Neue GUID erstellt, im inf und 
Header eingetragen und schon ging alles.
OP #883725
Lesenswert?

Hallo Christian,

ich habe jetzt das in die Header Datei eingefügt:
1
// {65FDE817-B5C9-4e08-861E-20A98348B221}
2
static const GUID usbguid = 
3
{ 0x65fde817, 0xb5c9, 0x4e08, { 0x86, 0x1e, 0x20, 0xa9, 0x83, 0x48, 0xb2, 0x21 } };

und die zweite Zeile hiervon in die inf Datei:
1
[Strings]
2
CyUSB.GUID="{65FDE817-B5C9-4e08-861E-20A98348B221}"

Ist das so richtig? Ich habe immer noch das gleiche Problem. Devicecount 
liefert 0. Öffnen geht auch nicht.
Muss ich evtl den PC neustarten?


Was ich in dem Zusammenhang auch nicht verstehe ist, dass es ja auch 
nicht funktioniert, wenn ich es in einem Programm mit Fenster versuche, 
also ein Handle übergeben kann.

Wie ich die Dokumentation mittlerweile verstehe braucht man die GUID 
auch gar nicht. Wenn nicht würde ich sie lieber weg lassen. Ich möchte 
das ganze möglichst einfach halten.
OP #885730
Lesenswert?

Christian R. wrote:
> Bei mir hat das bestens geklappt. Neue GUID erstellt, im inf und
> Header eingetragen und schon ging alles.

Könntest du vielleicht (oder auch jemand anderes) den/einen Programmcode 
und die inf Datei posten?
Ich kann einfach nicht finden was falsch läuft.
Oder liegt es an meiner Firmware? Mit dem Tool von Cypress funktioniert 
es jedenfalls...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren