请教高手,linux下使用libusb

请教高手,linux下使用libusb,第1张

一、系统还原后出现问题的解决方法

1

按下Win+R键打开“运行”程序,键入gpedit.msc 回车以打开本地组策略编辑器

2

调到图示位置将“用户账户控制:以管理员批准模式运行所有管理员”项改为已启用

3

重启系统,完成

END

二、账户权限被修改的解决方法

1

使用开始菜单和消息栏等功能需要一定的账户权限,用户账户权限被修改有三种情况,一种是病毒篡改,一种是系统文件损坏或遇到bug从而产生故障,一种是用户不小心改了某个项目导致权限缩小。

END

(一)病毒篡改

1

别的不说,先杀毒。建议在安全模式下进行杀毒 *** 作。

2

有些杀毒软件会在杀毒完成后自动修复被篡改文件,这时可尝试重启查看问题解决情况,若还是不行请看第(二)节。

END

(二)不小心改了某个项目导致权限缩小

1

如果实在想不起来动了什么地方,请先按照以下步骤图示中的默认配置一步步确认修改账户权限配置到自己计算机中。

2

首先,按图示确认修改本地组策略编辑器(在第一节中介绍了打开方法)的所有“用户账户控制”“域成员”和“账户”开头的选项

3

然后,右击这台电脑,选择管理,按图示进行确认修改

4

最后,重启。此时如果问题仍然存在,请看第(三)节。

END

(三)系统文件损坏或遇到bug

1

首先按第(二)节进行 *** 作,若问题解决就无须再看此节。

2

然后,如果你还有win10 Pro 9926的iso文件,就在win环境下断网进行安装,它会给你一个保留设置、个人文件和应用的选项,减少重装后再次修改设置和重装软件的麻烦。

3

完成上述两步后,一般此类问题都能解决,如果,极端的想,还没有解决,如果是从刚开始完全重装就有这种问题,请考虑是不是系统安装文件的问题,可以检测下SHA-1 散列值与官方下载页面相同;如果是升级安装的,请在设置更新和恢复的恢复中选恢复电脑而不影响你的文件或完全重装一遍(两个选项都需要系统iso镜像文件),或回滚到前一系统版本。注意备份重要文件。

由于公司的产品,导致我在Linux下写usb通信的代码出现了许多的问题,最后发现这些设备只能通过控制传输来 *** 作设备,所以后面的问题就迎刃而解了。现在贴上当时在QT下写的代码,以防日后再碰到此类问题的时候翻查。

还有在QT下使用libusb库的时候一定要在(项目名.pro)文件加上:

[cpp] view plain copy

INCLUDEPATH += /usr/include/libusb-1.0

LIBS += -L"/usr/lib/x86_64-linux-gnu" -lusb-1.0

否则程序无法找到该库的路径。

[cpp] view plain copy

libusb_device **devs

libusb_device_handle *dev_handle

libusb_context *ctx=NULL

struct libusb_device_descriptor desc

int r

ssize_t cnt

r=libusb_init(&ctx)

if(r<0)

{

//printf("init error")

QMessageBox::about(this,"haha","initialerror")

return

}

libusb_set_debug(ctx,3)

//cnt=libusb_get_device_list(ctx,&devs)

dev_handle=libusb_open_device_with_vid_pid(ctx,VID,PID)

if(dev_handle==NULL)

QMessageBox::about(this,"haha","open my dev error")

else

QMessageBox::about(this,"haha","open my dev success")

//libusb_free_device_list(devs,1)

if(libusb_kernel_driver_active(dev_handle,0)==1)

{

QMessageBox::about(this,"haha","kernel driver active")

if(libusb_detach_kernel_driver(dev_handle,0)==0)

QMessageBox::about(this,"haha","kernel driver detached")

}

r=libusb_claim_interface(dev_handle,0)

if(r<0)

{

QMessageBox::about(this,"haha","cannot claim interface")

return

}

QMessageBox::about(this,"haha","claimed interface")

// start use this usb

unsigned char dataOut[0x30]={0}

dataOut[0]=0x00

dataOut[1]=0x02

dataOut[2]=0x08

dataOut[3]=0x00

dataOut[4]=0x02

dataOut[5]=0x00

dataOut[6]=0xb2

dataOut[7]=0x30

dataOut[8]=dataOut[2]^dataOut[3]^dataOut[4]^dataOut[5]^dataOut[6]^dataOut[7]

//r=libusb_interrupt_transfer(dev_handle,LIBUSB_ENDPOINT_OUT, dataOut,9, &actual_length, 0)

//r=libusb_bulk_transfer(dev_handle,LIBUSB_ENDPOINT_OUT,dataOut,9,&actual_length,5000)

//此设备必须用控制传输

r=libusb_control_transfer(dev_handle, 0x21, 0x09, 0x0300, 0x00, dataOut+1, 0x20, 1000)

unsigned char dataRead[0x30]={0}

r=libusb_control_transfer(dev_handle, 0xa1, 0x01, 0x0300, 0x00, dataRead, 0x20, 1000)

if(r<0)

{

QMessageBox::about(this,"haha","transfer data error")

}else

{

QMessageBox::about(this,"haha","transfer data success")

}

//release everything

r=libusb_release_interface(dev_handle,0)

libusb_attach_kernel_driver(dev_handle,0)

libusb_close(dev_handle)

libusb_exit(ctx)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7317704.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-04
下一篇 2023-04-04

发表评论

登录后才能评论

评论列表(0条)

保存