Forum: Mikrocontroller und Digitale Elektronik Probleme mit FX2 unter C: USBDevice->DeviceCount()


von Christian H. (cavorca)


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

von Christian H. (cavorca)


Lesenswert?

Ich hatte die Vermutung, dass ich irgendwie eine falsche GUID habe. 
Jedenfalls habe ich es jetzt auch mal mit einem Fenster versucht, damit 
ich ein Handle habe, das ich übergeben kann. Genau das gleiche Problem 
wie vorher.

von Christian R. (supachris)


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.

von Christian H. (cavorca)


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.

von Christian H. (cavorca)


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...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.