Chinaunix首页 | 论坛 | 博客
  • 博客访问: 15530174
  • 博文数量: 2005
  • 博客积分: 11986
  • 博客等级: 上将
  • 技术积分: 22535
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-17 13:56
文章分类

全部博文(2005)

文章存档

2014年(2)

2013年(2)

2012年(16)

2011年(66)

2010年(368)

2009年(743)

2008年(491)

2007年(317)

分类: LINUX

2008-04-03 17:17:51

//gliethttp_20080403 libusb实际测试代码

//0x02为bulk类型的OUT端点

//0x81为bulk类型的IN端点

usb_dev_handle *tavor_udev;
BOOL OpenUsbPort (long int DelayTime)
{
    struct usb_bus *bus;
    struct usb_device *dev;

    usb_init();
    usb_find_busses();
    usb_find_devices();

    tavor_udev = NULL;
    for(bus = usb_busses;bus; bus = bus->next)
    {
        for (dev = bus->devices;dev; dev = dev->next)
        {
            if( (dev->descriptor.idVendor == 0x8086) && (dev->descriptor.idProduct == 0xd001) )
            {
                tavor_udev = usb_open(dev);
                return tavor_udev;
            }
        }
    }
    fprintf(stderr,"tavor usb could not be found\n");
    return tavor_udev;
}

BOOL WriteUsb (WTPCOMMAND WtpCmd,DWORD dwCmdSize)
{
    int write_bytes;
    write_bytes = usb_bulk_write(tavor_udev,0x02,(char*)&WtpCmd,dwCmdSize,200);
    return write_bytes;
}

BOOL ReadUsb(WTPSTATUS *WtpStatus, DWORD dwSize, PDWORD pBytesRead)
{
    int read_bytes;
    read_bytes = usb_bulk_read(tavor_udev,0x81,(char*)WtpStatus,dwSize,0);
    if(pBytesRead)*pBytesRead = read_bytes;
    return read_bytes;
}

BOOL ReadUsbCharBuffer (char *WtpMessage,DWORD dwSize,PDWORD pBytesRead)
{
    int result;

    if (tavor_udev == NULL)
    {
        printf (" Error: OpenUsbPort must be called prior to calling ReadUsb!");
        return FALSE;
    }
    result = usb_bulk_read(tavor_udev,0x81,(char*)WtpMessage,dwSize,100);
    if (result < 0 )
    {
        printf (" Error: ReadFile failed with error\n");
        return FALSE;
    }
    
    *pBytesRead = result;
    if (*pBytesRead != dwSize) return FALSE;
    
    return TRUE;
}
void CloseUsbPort ()
{
    if(tavor_udev)usb_close(tavor_udev);
}


使用libusb进行一些操作必须使用sudo超级用户才有权限,所以必须首先sudo su
比如:
usb_get_string_simple(udev, dev->descriptor.iManufacturer, string, sizeof(string));
usb_get_string_simple(udev, dev->descriptor.iProduct, string, sizeof(string));
int usb_bulk_write(usb_dev_handle *dev, int ep, char *bytes, int size,int timeout);
int usb_bulk_read(usb_dev_handle *dev, int ep, char *bytes, int size,int timeout);
int usb_interrupt_write(usb_dev_handle *dev, int ep, char *bytes, int size,int timeout);
int usb_interrupt_read(usb_dev_handle *dev, int ep, char *bytes, int size,int timeout);
等都需要sudo超级用户下才能正常,所以需要sudo su来执行我们的ntwptp.exe程序


阅读(25015) | 评论(5) | 转发(0) |
给主人留下些什么吧!~~

nietsche2009-09-09 14:07:37

遇到一个问题,在xp下,总是无法读取出数据,不知为何?

chinaunix网友2008-06-19 15:19:01

謝謝你提供的資訊 大致了解 ... 但我對USB傳輸極不熟悉 編譯還是有一堆ERROR . 應該是typedef的問題 我不知道你是否樂意提供你完整的source code?! anyway.. libusb官網 API文件寫的很簡略 請問你相關的API FUNCTION使用說明 都去哪邊參考呢? 謝謝你!!

chinaunix网友2008-06-19 11:45:03

謝謝你那麼快回覆 ^^ 因為你的example 只有function 但沒有提供main() code 我自己嘗試coding主程式 發覺我不會呼叫你寫的function example : void main() { OpenUsbPort (??);//input variable is void WriteUsb (??,??); ...etc } 謝謝!!

chinaunix网友2008-06-19 10:39:41

抱歉 請教一下 可否提供main() 我不知道呼叫引數要如何設定 可以嗎? 謝謝你

chinaunix网友2008-06-19 10:39:35

抱歉 請教一下 可否提供main() 我不知道呼叫引數要如何設定 可以嗎? 謝謝你