[KMDF USB] I/O to bulk endpoints on CDC ACM data class interface

Discussion in 'Windows Vista Drivers' started by chris.aseltine, Sep 3, 2006.

  1. Ok, so I have a new, bizarre problem that I just can't find any
    explanation for.

    I have a new device here that exports the CDC ACM configuration
    (interface 0 with a 'read' interrupt endpoint, and interface 1 with
    'read' and 'write' bulk endpoints).

    I'm using WDF_USB_DEVICE_SELECT_CONFIG_PARAMS_INIT_MULTIPLE_INTERFACES
    with arguments 2 (interfaces) and NULL (settingPairs pointer), which
    doesn't error out and configParams.NumConfiguredInterfaces does show
    "2" after the call.

    To make a long story short, I can only read from the interrupt
    endpoint. When I issue a read or a write to either of the endpoints on
    the second interface, the completion routine immediately fires and
    errors out with 0xC000000D -- invalid parameter. I've tried varying
    the read size, using a continuous reader, etc. -- they all give the
    same result.

    Now, here's the crazy part: *I HAD THIS WORKING!!* I could talk to
    the device (read/write) easily as of Friday afternoon. I didn't touch
    anything, as far as I know, and it just broke. The only thing that's
    different is that earlier I was using a laptop on its docking station
    (that's where the USB port was) and now I'm using a desktop. If I use
    the laptop without its docking station (that's all I have right now),
    it still fails as well.

    So I guess my question is: what could cause this? What causes the USB
    completion routines (in general, I suppose) to return
    STATUS_INVALID_PARAMETER?

    I compared USB monitor logs with my driver versus usbser.sys. They're
    fairly similar, except I noticed that my log has an additional "Select
    Interface: Interface Number: 0x1, Alternate Setting: 0x0) in it which
    the usbser.sys log does not contain.

    By the way -- If I change the device configuration so that the bulk
    endpoints are all on one interface, everything works.

    Any ideas??
     
    chris.aseltine, Sep 3, 2006
    #1
    1. Advertisements

  2. I don't get this.

    On a whim, I got a (USB 2.0) hub out of the closet and placed it
    between my device and the desktop PC, in an attempt to emulate the
    behavior of the laptop docking station.

    To my amazement, everything began working perfectly again.

    What could this mean?
     
    chris.aseltine, Sep 3, 2006
    #2
    1. Advertisements

  3. For what it's worth, I don't see this behavior on KMDF 1.5.

    But, just to make sure, I went back to KMDF 1.1 (and manually deleted
    wdf01000.sys and wdfldr.sys before reinstalling my device) and the
    behavior reappeared.

    Is there any information available about what changed between KMDF 1.1
    and 1.5, in terms of both resolved issues and new features (if any)?
     
    chris.aseltine, Sep 8, 2006
    #3
  4. i don't remember, is this on win2k? v1.5 fixed the select config/interface
    path to correctly set MaxTransferSize in the URB for each handle. only
    win2k looks at this value which is why this was not seen earlier

    d
     
    Doron Holan [MS], Sep 8, 2006
    #4
  5. Yes, this is on Win2k, and yes, I'm guessing that was it.

    Before I break out the debugger for my other issue about multiple
    add-device calls, I think I will try KMDF 1.5 to see if it goes away.
     
    chris.aseltine, Sep 8, 2006
    #5
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.