05-07-2010, 22:31
|
|
|
|
חבר מתאריך: 12.04.06
הודעות: 2,021
|
|
אני לא מבין את זה,
כל היום אני עובר על עשרות אתרי אינטרנט ולא מוצא פיתרון אחד שמתקרב למה שאני צריך.
הדבר הפשוט שאני מחפש:
להציג את כל יציאות הUSB שקיימות במחשב.
ולא רק את היציאה COM1 שהיא הsrial port!
יותר מורכב:
לשלוח מידע דרך USB, גם אם הוא בצורה טורית, וגם אם הוא בצורה מקבילית (או מה שלא יהיה)
והכי מורכב:
לשלוח נתון דרך המתאם המדובר, לפורט בUSB שיקרא כנתון מקבילי.
אחי עבד בעבר עם usb to rs232, ואמר שאמור להיות איזה DLL שמסדר את העבודה.
חיפשתי גם את זה - ומצאתי את libusb, ספרייה שאמורה לטפל בכל העסק הזה.
http://sourceforge.net/apps/trac/libusb-win32/wiki
הפעלתי לפי מדריכים שונים (כי בעמודים שהם מקשרים אליהם אין מידע מועיל), והצלחתי לקרוא את הUSB הנכון (כי הכותרת היתה כמו במנהל התקנים!),
אבל כשאני מנסה לשלוח/לקרוא נתון כמו שמתואר, מוחזרת שגיאה לא ברורה.
הנה הקוד שהשמשתי בו (אחרי ששמתי את הDLL במקום, והגדרתי לVS לעבוד עם ספרייה מיוחדת..)
קוד:
#include <stdio.h>
#include <conio.h>
#include <dos.h>
#include <usb.h>
/* the device's vendor and product id */
#define MY_VID 0xFE6
#define MY_PID 0x811E
#define MY_CONFIG 1
#define MY_INTF 0
/* the device's endpoints */
#define EP_IN 0x81
#define EP_OUT 0x1
#define BUF_SIZE 64
usb_dev_handle *open_dev(void);
usb_dev_handle *open_dev(void)
{
struct usb_bus *bus;
struct usb_device *dev;
for (bus = usb_get_busses(); bus; bus = bus->next)
{
for (dev = bus->devices; dev; dev = dev->next)
{
if (dev->descriptor.idVendor == MY_VID
&& dev->descriptor.idProduct == MY_PID)
{
return usb_open(dev);
}
}
}
return NULL;
}
int main(void)
{
usb_dev_handle *dev = NULL; /* the device handle */
char tmp[BUF_SIZE];
int ret;
usb_init(); /* initialize the library */
usb_find_busses(); /* find all busses */
usb_find_devices(); /* find all connected devices */
if (!(dev = open_dev()))
{
printf("error: device not found!\n");
return 0;
}
else
{
printf("success: device %04X:%04X opened\n",MY_VID,MY_PID);
}
if (usb_set_configuration(dev, MY_CONFIG) < 0)
{
printf("error: setting config #%d failed\n",MY_CONFIG);
usb_close(dev);
return 0;
}
else
{
printf("success: set configuration #%d\n", MY_CONFIG);
}
if (usb_claim_interface(dev, 0) < 0)
{
printf("error: claiming interface #%d failed\n", MY_INTF);
usb_close(dev);
return 0;
}
else
{
printf("success: claim_interface #%d\n", MY_INTF);
}
ret = usb_bulk_write(dev, EP_OUT, tmp, sizeof(tmp), 5000);
if (ret <= 0)
{
printf("error: bulk write failed (%d)\n",ret);
}
else
{
printf("success: bulk write %d bytes\n",ret);
}
ret = usb_bulk_read(dev, EP_IN, tmp, sizeof(tmp), 5000);
if (ret <= 0)
{
printf("error: bulk read failed\n");
}
else
{
printf("success: bulk read %d bytes\n",ret);
}
usb_release_interface(dev, 0);
usb_close(dev);
printf("Done.\n");
getchar();
return 0;
}
מה שבכחול - אני שיניתי לנתון המתאים של הפורט שלי, לפי איזו תוכנה שמצורפת לDLL שמציגה את כל הUSBים.
מה שבאדום - זה המקום שמוחזרת לי שגיאה (שהיא - מה שכתוב - שהכתיבה/הקריאה נכשלה)
אם מישהו יכול להביא לי קצה חוט בכל העסק, אני אשמח.
מיואש כבר
_____________________________________
|