Skip to content

Commit

Permalink
Capture get current frame number request
Browse files Browse the repository at this point in the history
Record URB_FUNCTION_GET_CURRENT_FRAME_NUMBER as USBPCAP_TRANSFER_IRP_INFO.
When the URB returns from host controller driver, the 4 bytes of data
is the current 32-bit frame number.

Closes: #84
  • Loading branch information
desowin committed Jul 1, 2019
1 parent 546dbf1 commit 8ee0a73
Showing 1 changed file with 32 additions and 0 deletions.
32 changes: 32 additions & 0 deletions USBPcapDriver/USBPcapURB.c
Original file line number Diff line number Diff line change
Expand Up @@ -975,6 +975,38 @@ VOID USBPcapAnalyzeURB(PIRP pIrp, PURB pUrb, BOOLEAN post,
break;
}

case URB_FUNCTION_GET_CURRENT_FRAME_NUMBER:
{
struct _URB_GET_CURRENT_FRAME_NUMBER *request;
USBPCAP_BUFFER_PACKET_HEADER packetHeader;
UINT32 frameNum;

request = (struct _URB_GET_CURRENT_FRAME_NUMBER*)pUrb;

packetHeader.headerLen = sizeof(USBPCAP_BUFFER_PACKET_HEADER);
packetHeader.irpId = (UINT64) pIrp;
packetHeader.status = header->Status;
packetHeader.function = header->Function;
packetHeader.info = 0;
packetHeader.bus = pDeviceData->pRootData->busId;
packetHeader.device = pDeviceData->deviceAddress;
packetHeader.endpoint = 0x80;
packetHeader.transfer = USBPCAP_TRANSFER_IRP_INFO;
packetHeader.dataLength = 0;

if (post == TRUE)
{
packetHeader.info |= USBPCAP_INFO_PDO_TO_FDO;
frameNum = request->FrameNumber;
packetHeader.dataLength = sizeof(frameNum);
}

USBPcapBufferWritePacket(pDeviceData->pRootData,
&packetHeader,
&frameNum);
break;
}

default:
{
if (post == FALSE)
Expand Down

0 comments on commit 8ee0a73

Please sign in to comment.