-         

Ergebnis 1 bis 3 von 3

Thema: USB Datenempfang funktioniert nicht (c++, win xp sp3, LibUSB)

  1. #1

    USB Datenempfang funktioniert nicht (c++, win xp sp3, LibUSB)

    Anzeige

    Hallo zusammen,

    ich habe diese Frage schon in einem anderem Forum gepostet aber leider keine
    Antwort bekommen. Ich denke einfach, das war das falsche Forum. Hier meine Problem:

    Ich habe hier einen Nibo2 der über ein XBee Modul Daten a ein UCOM-XBee
    Modul (inkl. XBeee Modul) an meinen PC schickt. Das UCOM-XBee Modul steckt
    also in meinem PC. Die empfangenen Daten kann ich mit der Software X-CTU (vom Hersteller)
    auch problemlos auslesen.

    Nun will ich mir eine Anwendung unter Verwendung von libusb-win32
    schreiben damit ich die einkommenden Daten weiter verarbeite kann.

    Ich muss dazu sagen dass ich mich noch im "Anänger-Bereich" in C++
    Programmierung befinde und ich noch etwas Schwierigkeiten damit habe.

    Nun habe ich folgendes Programm,(Windows XP SP3):

    #include <stdio.h>
    #include "libusb_download\include\lusb0_usb.h"
    struct usb_bus *busses;
    struct usb_bus *bus;
    struct usb_device *dev;
    struct usb_dev_handle *xbee;
    int returncode;

    void init()
    {

    for (bus = busses; bus; bus = bus->next) {
    for (dev = bus->devices; dev; dev = dev->next) {
    if (dev->descriptor.iSerialNumber == 220){

    if (xbee=usb_open(dev)) {
    printf("Device opened \n");
    }
    else{
    printf("Device NOT opened = \n");
    }


    if((returncode=usb_set_configuration(xbee, 1)) < 0){
    printf("NO configuration \n");
    }
    else{
    printf("Configuration = %d \n",returncode);
    }


    if((returncode=usb_claim_interface(xbee, 0)) < 0){
    printf("NOT claimed \n");
    }
    else{
    printf("Claimed = %d \n", returncode);
    }


    int main() {
    usb_init();
    usb_find_busses();
    usb_find_devices();
    busses = usb_get_busses();
    init();

    char buffer[8];
    while (1)
    {
    returncode = usb_interrupt_read(xbee, 0x82, buffer, 8, 50);
    printf ("bytes = %d Buffer=: %d%d%d%d%d%d%d%d \n", returncode,
    buffer[0], buffer[1], buffer[2], buffer[3], buffer[4], buffer[5],
    buffer[6], buffer[7]);
    }
    return 0;
    }


    Das Programm lässt sich ohne Fehler compilieren. Bei
    usb_set_configuration und usb_set_configuration bekomme ich auch keine
    Fehler. Bei usb_interrupt_read bekomme ich den Fehler -116. Ich bin der
    Meinung das ist ein Timeout.

    Hier noch die Configs meines USB Adapters:

    DLL version: 1.2.6.0
    Driver version: 1.2.6.0

    bus/device idVendor/idProduct
    bus-0/\\.\libusb0-0001--0x03eb-0x204b 03EB/204B
    - Manufacturer : Dean Camera
    - Product : LUFA USB-RS232 Adapter
    - Serial Number: A48363536383511060C1
    bLength: 18
    bDescriptorType: 01h
    bcdUSB: 0110h
    bDeviceClass: 02h
    bDeviceSubClass: 00h
    bDeviceProtocol: 00h
    bMaxPacketSize0: 08h
    idVendor: 03EBh
    idProduct: 204Bh
    bcdDevice: 0001h
    iManufacturer: 1
    iProduct: 2
    iSerialNumber: 220
    bNumConfigurations: 1
    wTotalLength: 62
    bNumInterfaces: 2
    bConfigurationValue: 1
    iConfiguration: 0
    bmAttributes: c0h
    MaxPower: 250
    bInterfaceNumber: 0
    bAlternateSetting: 0
    bNumEndpoints: 1
    bInterfaceClass: 2
    bInterfaceSubClass: 2
    bInterfaceProtocol: 1
    iInterface: 0
    bEndpointAddress: 82h
    bmAttributes: 03h
    wMaxPacketSize: 8
    bInterval: 255
    bRefresh: 0
    bSynchAddress: 0
    bInterfaceNumber: 1
    bAlternateSetting: 0
    bNumEndpoints: 2
    bInterfaceClass: 10
    bInterfaceSubClass: 0
    bInterfaceProtocol: 0
    iInterface: 0
    bEndpointAddress: 04h
    bmAttributes: 02h
    wMaxPacketSize: 16
    bInterval: 1
    bRefresh: 0
    bSynchAddress: 0
    bEndpointAddress: 83h
    bmAttributes: 02h
    wMaxPacketSize: 16
    bInterval: 1
    bRefresh: 0
    bSynchAddress: 0

    Ich kann diese Konfigurationen auch in meiner Anwendung auslesen, nur
    dass ich die vom Nibo2 gesendeten Daten auf meinem PC Auslesen kann
    funktioniert nicht.

    So weit ich die Configs des USB Adapters interpretieren kann hat "bInterfaceNumber: 1"
    2 Endpoints (0x04 und 0x83) die ich mit usb_bulk_read (0x83) und usb_bulk_write (0x04)
    ansprechen können sollte. Der Code wurde dementsprechend verändert:

    usb_claim_interface(xbee, 1)

    char buffer[16];
    usb_bulk_read(xbee, 0x83, buffer, sizeof(buffer), 500);
    bzw.
    usb_bulk_write(xbee, 0x04, buffer, sizeof(buffer), 500);


    Auch dies funktioniert leider nicht. Nun stehe ich echt aufm Schlauch.
    Was mache ich falsch? Ich bin über jeden Tipp dankbar. Wenn ihr noch Fragen hab, einfach
    fragen.

    Grüße, Marco

  2. #2
    Neuer Benutzer Öfters hier
    Registriert seit
    01.04.2007
    Ort
    good old Germany
    Beiträge
    27
    Wenn ich das richtig gesehen habe benutzt UCOM_XBEE noch das USB 1.1 Protokoll.
    Nicht sicher, inwieweit LibUSB richtig damit umgehen kann.
    In der Dokumentation wird nur von USB 2.0 gesprochen.

    Ja, -116 bedeutet „connection timed out“.

    Vielleicht will das UCOM-XBEE die Daten gar nicht herausgeben?
    Oder weißt Du, dass es möglich sein muss?

    Ich würde einfach mal einen USB Analyzer (z.B. USBTrace), installieren und mal „mithören“, wie der originale Datentransfer abläuft.
    Vielleicht macht der Treiber ja vorher was Spezielles um den Datenaustausch zu initialisieren.

    Ich erinnere mich an den PS3 Controller, der auch ein spezielles Datenpacket erwartet hat, bevor er Daten rausrückt.

  3. #3
    Hallo CCP1CON,

    vielen Dank für deine Antwort. Ich habe aber zum Glück das Problem schon gelöst. Ich war hier leider völlig auf dem Holzweg. Diese Information hat mir dann weiter geholfen:

    "Der UCOM ist ein Standard USB CDC Gerät, das bedeutet, das er sich einfach über eine virtuelle serielle Schnittstelle ansprechen lässt. USB Verständnis/Details sind unnötig....
    Du musst einfach nur den entsprechenden COM-Port öffnen. Danach kommt der serielle Datenstrom am XBee Modul an. "

    Nachdem ich nun den UCOM als serielle Schnittstelle angesprochen habe, hat alles funktioniert.

    Grüße, Marco

Ähnliche Themen

  1. LibUsb legt alle USB Ports lahm
    Von 128er im Forum Schaltungen und Boards der Projektseite Mikrocontroller-Elektronik.de
    Antworten: 8
    Letzter Beitrag: 02.02.2012, 21:21
  2. Serieller Datenempfang C# / AVR-GCC
    Von shedepe im Forum C - Programmierung (GCC u.a.)
    Antworten: 4
    Letzter Beitrag: 23.12.2010, 20:44
  3. Datenempfang über RS-232 mit VB2008
    Von rogerberglen im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 09.11.2010, 11:35
  4. Bascom AVR unter Win98
    Von fiatx im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 12.12.2008, 14:23
  5. Avrdude und WIN98
    Von Hilel im Forum Elektronik
    Antworten: 18
    Letzter Beitrag: 13.05.2005, 00:32

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •