• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > USB設備驅動程序設計

    USB設備驅動程序設計

    作者:陳新忠 中國電子科技集團公司第二十研究所 時間:2010-03-02 來源:電子產品世界 收藏

      設備的編程

    本文引用地址:http://www.czjhyjcfj.com/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 驅動程序

    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 忻州市| 西昌市| 江陵县| 巴青县| 阜新| 南平市| 墨脱县| 大理市| 鄂托克旗| 黄冈市| 固阳县| 罗源县| 尉氏县| 高要市| 武宣县| 基隆市| 天柱县| 宿迁市| 沁源县| 定结县| 稷山县| 绵竹市| 汨罗市| 隆德县| 昆山市| 梧州市| 布尔津县| 莱州市| 汉源县| 开封县| 余干县| 无锡市| 邹城市| 宣武区| 咸阳市| 靖边县| 株洲市| 历史| 合川市| 阿拉善左旗| 容城县|