当前位置:  技术问答>linux和unix

write问题一问

    来源: 互联网  发布时间:2015-10-08

    本文导语:  问题背景: 控制一个计算机外围设备,该设备是USB接口的HID类设备,程序如下: #include  #include  #include  #include  int main() {     char buf[2];     int w; int fd=open("/dev/usb/hiddev0",O_RDWR); //hiddev0是对应的设备文件 if(fd == ...

问题背景:
控制一个计算机外围设备,该设备是USB接口的HID类设备,程序如下:
#include 
#include 
#include 
#include 

int main()
{
    char buf[2];
    int w;
int fd=open("/dev/usb/hiddev0",O_RDWR); //hiddev0是对应的设备文件
if(fd == -1) 

  printf("Open hiddev0 Error!n"); 
}else{
  printf("Open hiddev0 Ok!n");
  buf[0]=0x02;
  buf[1]=0x13;
  w=write(fd, buf, 2);//这里返回 -1不知道为什么,在这里是发送的命令和操作系统应该没有关系的呀,难到写法有问题?
  printf("write hiddev0 %d n",w);
}
close(fd);

return 1;
}
//#########################windows下实现的发送命令代码####################
  CHAR OutputReport[2];
OutputReport[0]=0x02;
if (check3==1){//表示锁定
OutputReport[1]=0x14;
}else{
OutputReport[1]=0x13;
}
 
DWORD BytesWritten = 0;
ULONG Result;
  Result = WriteFile 
(DeviceHandle, 
OutputReport, 
Capabilities.OutputReportByteLength, 
&BytesWritten, 
NULL);

|
USB驱动是否有问题?

|
如果不知道详细的硬件描述,则先用HIDIOCGUSAGE取得所有的usage_ref.report_type = HID_REPORT_TYPE_OUTPUT的硬件描述,
取得 usage_ref.field_index, usage_ref.usage_code等数据,然后
usage_ref.report_id = 0x02   ;(report_id)
usage_ref.usage_index = 0;  (command index)
usage_ref.value =  0x13 ;  (command)

然后再
ioctl(fd, HIDIOCSUSAGE, &usage_ref);

rep_info.report_type = HID_REPORT_TYPE_OUTPUT;
rep_info.report_id = 0x02   ;(report_id)
rep_info.num_fields = 1;
ioctl(fd, HIDIOCSREPORT, &rep_info);

|
printf("error=%d(%s)n", errno, strerror(errno)); 用这个系统错误打出来看看。

|
应该是驱动问题!这个代码没问题。

|
hiddev是不能使用wirte的,应该使用ioctl的,HIDIOCSUSAGE和HIDIOCSREPORT,

HIDIOCSREPORT - struct hiddev_report_info (write)
Instructs the kernel to send a report to the device. This report can
be filled in by the user through HIDIOCSUSAGE calls (below) to fill in
individual usage values in the report beforesending the report in full
to the device. 

HIDIOCSUSAGE - struct hiddev_usage_ref (write)
Sets the value of a usage in an output report

    
 
 

您可能感兴趣的文章:

  • linux和windows串口问题!?linux向windows端发送,第一次write正常,继续write,windows接收到的就变成乱码了,这是什么原因??????
  • 关于socket中write()函数的问题
  • response.getWriter().write()向前台打印信息乱码问题解决
  • linux下write调用问题
  • 初学linux,关于write命令的问题
  • read 和write问题!
  • 一个函数的问题: write(..)
  • write或fwrite的问题
  • 使用tomcat出现的问题(socket write error),请教大家
  • 读取文件,替换一定的内容后给另外的一个页面(document.write),字符转换的问题
  • 请教read()和write()函数的问题
  • 关于read,write,sleep的问题。
  • 驱动程序的write问题
  • fork时的copy-on-write问题
  • C#中Response.Write常见问题汇总
  • linux下 read() write()的问题大家帮忙~~~~~~~!!!
  • 头痛问题:编译时出错,FileOutputStream类write方法错误
  • linux write 问题
  • Linux字符设备驱动疑难问题--printf打印信息发到字符设备write函数中
  • 解决MYSQL出现Can't create/write to file '#sql_5c0_0.MYD'的问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • C++ I/O 成员 write():写字符
  • 真实文件系统中的write和aio_write有什么区别
  • java命名空间java.io类outputstream的类成员方法: write定义及介绍
  • generic_file_aio_write_nolock和generic_file_aio_write什么区别啊?
  • java命名空间java.io类filteroutputstream的类成员方法: write定义及介绍
  • 对同一设备文件操作,write后,能read出刚write的内容,为什么???
  • java命名空间java.util.logging类errormanager的类成员方法: write_failure定义及介绍
  • [100分求助]预连接:prelink: Could not write /lib/ld-2.5.so: cannot write data to file
  • java命名空间java.io类pipedoutputstream的类成员方法: write定义及介绍
  • Stream.Write 与 StreamWriter.Write 的不同
  • java命名空间java.io接口objectoutput的类成员方法: write定义及介绍
  • 关于write函数的第三个参数的传递
  • java命名空间java.io类randomaccessfile的类成员方法: write定义及介绍
  • 请教:socket编程中send和write的区别
  • java命名空间java.io类stringwriter的类成员方法: write定义及介绍
  • 关于write()和fsync()
  • java命名空间java.io类printwriter的类成员方法: write定义及介绍
  • read write ??????????????????
  • java命名空间java.io类objectoutputstream的类成员方法: write定义及介绍
  • read/write 和 fread/fwrite 有什么区别
  • java命名空间java.io类chararraywriter的类成员方法: write定义及介绍
  • 这个write()怎么理解?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3