Windows驱动_USB驱动之七

              偶然的机会知道了一个同事的工资,竟然比自己多1K多,刚开始,自己心里有点不平衡,一般来说,经验差不多,工资的水平应该不会低多少,后来,这跟自己的环境,以及以前的工资都是有很大的关系的,后来想到,自己之前的工资,真实很低,这边给这么多,马上就答应了,如果换做另外一个人,因为他目前的工资水平已经很高,所以他可能对这个工资会考虑一下,如果公司的项目急需要人,就会跟他涨工资,这就促成了,他的工资比一般人高,但是这种高,千万不要以为,是公司认为他的能力够,而是项目的原因,所以,当公司一下没项目的时候,就立马会从这样的人下手。所以,我们要从长远来看,比如,你在公司的发展,公司是不是认可你,承认过你等等,这些都可以看出公司对你的看重,当然,公司不能一下,将你的工资,加得很高,这个必须符合整个公司的工资水平等等。所以,我们必须从长远来看这个问题。

 

             今天,我们来看关于Windows驱动中USB设备的同步传输是如何进行的,昨天,我们说到了,这个函数是ReadWriteIsochEndPoints,首先看下这个函数的源码:

VOID
ReadWriteIsochEndPoints(
    _In_ WDFQUEUE         Queue,
    _In_ WDFREQUEST       Request,
    _In_ ULONG            Length,
    _In_ WDF_REQUEST_TYPE RequestType
    )
/*++

Routine Description:

    This routine does some validation and invokes appropriate function to perform Isoch transfer

--*/
{
    NTSTATUS                    status;
    WDF_USB_PIPE_INFORMATION    pipeInfo;
    PFILE_CONTEXT               fileContext;
    WDFUSBPIPE                  pipe;
    PDEVICE_CONTEXT             deviceContext;
    PREQUEST_CONTEXT            rwContext;

    UNREFERENCED_PARAMETER(Length);

    UsbSamp_DbgPrint(3, ("ReadWriteIsochEndPoints - begins\n"));

    //
    // Get the pipe associate with this request.
    //
    fileContext = GetFileContext(WdfRequestGetFileObject(Request));
    pipe = fileContext->Pipe;

    WDF_USB_PIPE_INFORMATION_INIT(&pipeInfo);
    WdfUsbTargetPipeGetInformation(pipe, &pipeInfo);

    if ((WdfUsbPipeTypeIsochronous != pipeInfo.PipeType)) {
        UsbSamp_DbgPrint(1, ("Pipe type is not Isochronous\n"));
        status = STATUS_INVALID_DEVICE_REQUEST;
        goto Exit;

    }

    if (RequestType == WdfRequestTypeRead && WdfUsbTargetPipeIsInEndpoint(pipe) == FALSE) {
        UsbSamp_DbgPrint(1, ("Invalid pipe - not an input pipe\n"));
        status = STATUS_INVALID_PARAMETER;
        goto Exit;    
    }

    if (RequestType == WdfRequestTypeWrite && WdfUsbTargetPipeIsOutEndpoint(pipe) == FALSE) {
        UsbSamp_DbgPrint(1, ("Invalid pipe - not an output pipe\n"));
        status = STATUS_INVALID_PARAMETER;
        goto Exit;    
    }

    deviceContext = GetDeviceContext(WdfIoQueueGetDevice(Queue));
    rwContext = GetRequestContext(Request);

    if (RequestType == WdfRequestTypeRead) {       
        rwContext->Read = TRUE;
        status = WdfRequestForwardToIoQueue(Request, deviceContext->IsochReadQueue);
    } 
    else {
        rwContext->Read = FALSE;
        status = WdfRequestForwardToIoQueue(Request, deviceContext->IsochWriteQueue);
    }

    if (!NT_SUCCESS(status)){
       UsbSamp_DbgPrint(1, ("WdfRequestForwardToIoQueue failed with status 0x%x\n", status));
       goto Exit;
    }

    return;

Exit:
    WdfRequestCompleteWithInformation(Request, status, 0);
    return;
}


这个函数的上半部分,好理解,得到pipeinfo,我们知道同步读,所以对应的PIPE输出端点OUT ,同步写,对应的PIPE的输入端点IN,下半部分很简单,直接调用WdfRequestForwardToIoQueue将请求送至相应的同步读和写队列。这个时候,我们可以回忆一下,这两个队列,是如何注册的,我们这两个队列都有注册队列事件回调函数,当队列中有请求进入的时候,将调用这个回调函数,我们看前面的代码:

    status = WdfIoQueueReadyNotify(pDevContext->IsochReadQueue,
                                   UsbSamp_EvtIoQueueReadyNotification,
                                   (WDFCONTEXT)pDevContext);

    status = WdfIoQueueReadyNotify(pDevContext->IsochWriteQueue,
                                   UsbSamp_EvtIoQueueReadyNotification,
                                   (WDFCONTEXT)pDevContext);

我们直接来看下这个函数UsbSamp_EvtIoQueueReadyNotification:


                
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
win10_adb_fastboot驱动_usb_driver是指用于在Windows 10操作系统上安装和管理Android设备的ADB(Android Debug Bridge)和Fastboot驱动,以便进行开发者选项和设备连接。 ADB驱动是Android开发工具包(SDK)中的一个组件,它允许开发者通过电脑上的命令行界面与Android设备进行通信。借助ADB驱动,开发者可以在电脑上安装、调试和测试应用程序,还可以利用ADB命令来获取设备信息、传输文件等。 Fastboot驱动是Android设备上的引导程序,它提供了一种引导设备到Fastboot模式的方式。Fastboot模式是一种拥有高级权限的启动模式,使用Fastboot驱动可以在设备上执行一系列高级操作,如刷写系统分区、解锁引导程序等。 在Windows 10操作系统上安装和配置win10_adb_fastboot驱动_usb_driver一般分为以下几个步骤: 1. 下载ADB驱动程序。例如,可以从官方的Android开发者网站下载最新版本的ADB驱动。 2. 解压下载的驱动文件。将解压后的文件夹保存到一个容易访问的位置。 3. 启动设备管理器。在Windows 10上,可以通过按下Windows键 + X打开快速访问菜单,然后选择“设备管理器”来打开设备管理器。 4. 连接Android设备。使用USB数据线将Android设备连接到电脑上。确保设备处于开发者模式,并已启用USB调试选项。 5. 在设备管理器中找到Android设备。通常,Android设备会出现在“其他设备”或“便携式设备”下面,它可能带有一个黄色的感叹号图标。 6. 右键单击Android设备,选择“更新驱动程序”。 7. 在更新驱动程序向导中,选择“浏览计算机以查找驱动程序软件”。 8. 浏览到之前下载和解压的ADB驱动文件夹,并选择相应的驱动程序。 9. 完成驱动程序的安装过程后,设备管理器中的Android设备应该显示为正常状态。 安装和配置win10_adb_fastboot驱动_usb_driver后,开发者就可以开始使用ADB和Fastboot命令与Android设备进行交互,进一步开发、调试和测试Android应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值