mikrocontroller.net

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


Autor: Christian H. (cavorca)
Datum:

Bewertung
0 lesenswert
nicht 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.

 #include "stdafx.h" 
 #include <stdio.h> 
  
 #include <windows.h> 
 #include "cyapi.h"  
  
 int main(int argc, char* argv[]) 
 { 
      char achBuffer[100]; 
      int i; 
       
      CCyUSBDevice *USBDevice =  new CCyUSBDevice();  
  
     //  Attempt to open device #0  
      
      i=USBDevice->DeviceCount(); 
  
      sprintf(achBuffer, "Anzahl Devices: %d", i); 
     MessageBox(NULL, achBuffer, "Ausgabe", MB_OK); 
  
  
     if (USBDevice->DeviceCount()  && !USBDevice->Open(0)) {   
            
         USBDevice->Reset();  
         USBDevice->Open(0);  
     } 
  
     if (! USBDevice->IsOpen()) { 
           printf( "Fail\n"); 
      } else { 
           printf("open OK\n"); 
      }   
       
       
      return 0; 
 } 


Da ich erst mal nur Konsolen Programme schreibe habe ich mal das 
erzeugen des Objektes durch
GUID guid;// = IIDFromString("{0C1D1055-0ACF-4800-8E79-DB09641464CF}");
  IIDFromString(OLESTR("{0C1D1055-0ACF-4800-8E79-DB09641464CF}"),&guid);
    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

Autor: Christian H. (cavorca)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Christian R. (supachris)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Christian H. (cavorca)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Christian,

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

und die zweite Zeile hiervon in die inf Datei:
[Strings]
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.

Autor: Christian H. (cavorca)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.