新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > USB设备驱动程序设计

USB设备驱动程序设计

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

  设备的编程

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

  在使用DriverWizard生成框架、模块及部分程序源代码后,开发者只需完成图2中三个控制代码所对应的三个功能模块的编程:模块DIO_IOCTL_ ID_CODE_Handler的功能是从控制端点0读取数据,模块DIO_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;

  tatus=m_Lower.SubmitUrb(pUrb,NULL,

  NULL,0);

  delete pUrb;

  }

  return status;

  }

  对象I包含了应用程序下传的IRP内容,包括命令或数据等参数,函数BuildVendorRequest用来分配并初始化一个用于厂商请求的URB(USB Request Block),该URB将作为下传IRP的一个参数,通过函数SubmitUrb发送给总线,以便完成与硬件的通信。



关键词: NXP USB 驱动程序

评论


相关推荐

技术专区

关闭