arc
17.10.2012, 08:40
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
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