usb滑鼠驅動註解及獲取滑鼠座標
阿新 • • 發佈:2019-02-06
#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;
}
#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;
}