新闻中心

EEPW首页 > 模拟技术 > 设计应用 > USB设备驱动程序的设计

USB设备驱动程序的设计

作者:陈新忠 中国电子科技集团公司第二十研究所时间:2009-05-21来源:电子产品世界收藏

  9)最后选择完成并确认生成新的项目信息,向导程序就会在usbdio目录中生成一个名为USBDIO的项目文件,其中包括了ISP1581框架、模块及部分源代码。

本文引用地址:http://www.eepw.com.cn/article/94605.htm

  USB设备的编程

  在使用DriverWizard生成框架、模块及部分程序源代码后,开发者只需完成图2中三个控制代码所对应的三个功能模块的编程:模块USBDIO_IOCTL_ID_CODE_Handler的功能是从控制端点0读取数据,模块USBDIO_IOCTL_TEST_COMMAND_Handler的功能是向控制端点0发送一个控制命令,模块USBDIO_IOCTL_DMA_COMMAND_Handler的功能是向控制端点0发送一个要求USB设备进行DMA传输的控制命令,下面是第一个模块的编程实例。

  NTSTATUS USBDIODevice::USBDIO_IOCTL_ID_CODE_Handler(KIrp I)

  {

  NTSTATUS status = STATUS_SUCCESS;

  t << "Entering USBDIODevice::USBDIO_IOCTL_ID_CODE_Handler, " << I << EOL;

  PURB pUrb;

  ULONG numData;

  numData=*(PUCHAR)I.IoctlBuffer();//设置读取的数据个数

  pUrb=m_Lower.BuildVendorRequest(

  (PUCHAR)I.IoctlBuffer(),//驱动程序存放读取的数据的内存区

  numData,//wLength,读取的数据个数

  0,

  0x0c,//bRequest

  0,//wValue

  TRUE,//input

  TRUE,

  NULL,

  0x0472,//wIndex,传输到固件程序的读数命令码

  URB_FUNCTION_VENDOR_ENDPOINT,

  NULL

  );

  if(pUrb==NULL)

  {

  I.Information() =0;

  status=STATUS_INSUFFICIENT_RESOURCES;

  }

  else

  {

  I.Information() =numData;

  status=m_Lower.SubmitUrb(pUrb,NULL,NULL,0);

  delete pUrb;

  }

  return status;

  }



评论


相关推荐

技术专区

关闭