Ah, I see.
The sniffer puts these lines on its log at the moment of each event
- dark blue URB tag, when the upper driver sends URB query to lower USB system driver (USBDI).
- light blue URB* tag, when USBDI replies with pending.
- light blue URB tag, when USBDI replies with completion.
HID class driver sequentially pushes two independent URBs to the host controller's queue (TD/qTD list) at its start up, to guarantee 1ms (for FS, or 125 us for HS) interval. These two URBs are identified with its IRP address (Irp Request column). These two URBs are pended until device returns interrupt IN transfer.
On the sniffer log,
- dark URB: URB1 query
- light URB*: URB1 pending
- dark URB: URB2 query
- light URB*: URB2 pending
When an interrupt transfer comes from device, the first URB on the queue completes. The sniffer reports light-blue URB completion line. HID class driver immediately processes this URB, and it puts another URB using the same IRP. And then, the sniffer puts dark-blue URB and URB*.
- light URB: URB1 completion
- dark URB: URB1 query
- light URB*: URB1 pending
When next interrupt transfer comes, the URB on the queue responds. HID class driver processes this URB in the same way as the first URB.
- light URB: URB2 completion
- dark URB: URB2 query
- light URB*: URB2 pending
These sequences continue, using URB1 and URB2 alternately.
In this way, you see completion - "init" - pending group on the log.
Tsuneo