1. 程式人生 > >usb滑鼠驅動註解及獲取滑鼠座標

usb滑鼠驅動註解及獲取滑鼠座標

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>
#include <termios.h>
#include <errno.h>
#include <fcntl.h>
#include <sys/ioctl.h>
#include "usb.h"


#define IdVendor 0x093A   //這是我裝置的廠商號
#define IdProduct 0x2510   //這是我裝置的產品號,當你的usb裝置接入電腦時,使用lsusb -v命令來檢視裝置資訊,請看下面第三張圖片中的0079:0006
char buf8[8],enp_num[8],is_change=0;


static int read_interupt(struct usb_device *dev)
{
    usb_dev_handle *udev;
   


    int  i;
    udev=usb_open(dev);
    //使用libusb驅動前必須使介面脫離linux核心驅動
    usb_detach_kernel_driver_np(udev,0);
    //操作libusb介面函式時需要宣告介面
    usb_claim_interface(udev,0);
    //讀中斷端點1
    usb_interrupt_read(udev,1,buf8,8,0x0a);
   //printf("%d\n",ret);
    usb_release_interface(udev,0);


    for(i=0;i<8;i++)
    {
        if(i==2)    //為了消除第二項不穩定因素
            continue;
        if(enp_num[i]!=buf8[i])
        {
            is_change=1;
            break;
        }
    }
   
    if(is_change==1)
    {
        is_change=0;
        for(i=0;i<8;i++)
        {
            enp_num[i]=buf8[i];
            printf("%d ",enp_num[i]);
                       
        }
         printf("\n");
        //printf("Button type = %d, X = %d, Y = %d,W= %d\n", buf8[0] , buf8[1], buf8[2],buf8[3]);
      //usleep(500*1000);
    }


      //printf("Button type = %d, X = %d, Y = %d,W= %d\n", buf8[0] , buf8[1], buf8[2],buf8[3]);
      
    
    //usleep(500*1000);
    if (udev)
        usb_close(udev);
    return 0;
}




int main(int argc, char *argv[])
{   
    int fd;
    int ret;
    int i;
    struct usb_bus *bus;
    struct usb_device *dev;
    unsigned char send_buf[64]={0x01,0xad,0x00};
    unsigned char crc=0x00;
    usb_init();
    usb_find_busses();
    usb_find_devices();
    memset(enp_num,0,sizeof(enp_num));
    memset(buf8,0,sizeof(buf8));
    for (bus = usb_busses; bus; bus = bus->next) {       
       for (dev = bus->devices; dev; dev = dev->next)     
           {  
              printf("dev->descriptor.idVendor=0x%0x           dev->descriptor.idProduct=0x%0x\n", dev->descriptor.idVendor,dev->descriptor.idProduct);
               if((dev->descriptor.idVendor==IdVendor)&&(dev->descriptor.idProduct==IdProduct))
               {     printf("-----------%d\n",__LINE__ );                                    
                    while(1)
                    {
                        read_interupt(dev);
                       
                    }              
               }
           }
       }
   printf("*****************************\n");
  
   return 0;
}