阅读:1390回复:8
请教如何实现控制传输!!!!!!!!!!!
如果我要通过ep0给外设传送指令数据(0x80),该如何实现呢?
|
|
最新喜欢:![]() |
沙发#
发布于:2003-10-16 11:02
看来还是要等斑竹来解决问题了,难道你们做的项目不用ep0传输命令吗?
|
|
板凳#
发布于:2003-10-16 11:23
你是做usb boot吗?能不能说详细点? [/我是菜鸟]
|
|
地板#
发布于:2003-10-16 14:35
我做的是USB采集,需要给外设发送指令,因此用到EP0
|
|
地下室#
发布于:2003-10-16 15:05
端口0发送vendor命令如下,driverstudio程序:
NTSTATUS Mp3testADevice::MP3TESTA_IOCTL_800_Handler(KIrp I) { NTSTATUS status = STATUS_SUCCESS; //####################### // int iTest; UCHAR cBufferA; UCHAR cBufferB; UCHAR *pBuffer; pBuffer=(PUCHAR)(I.IoctlBuffer()); // cBuffer=*(PUCHAR)(I.IoctlBuffer()); cBufferA=*pBuffer; pBuffer++; cBufferB=*pBuffer; ULONG dwInputBufferSize = I.IoctlInputBufferSize(); ULONG dwOutputBufferSize = I.IoctlOutputBufferSize(); //######################## t << \"Entering Mp3testADevice::MP3TESTA_IOCTL_800_Handler, \" << I << EOL; //########################### t << \"xxxxx:MP3TESTA_IOCTL_800_Handler, the receive data A: \" << cBufferA << EOL; t << \"xxxxx:MP3TESTA_IOCTL_800_Handler, the receive data B: \" << cBufferB << EOL; t << \"xxxxx:MP3TESTA_IOCTL_800_Handler, the receive data length \" << dwInputBufferSize << EOL; t << \"xxxxx:MP3TESTA_IOCTL_800_Handler, the need to send data length \" << dwOutputBufferSize << EOL; //########################### // TODO: Verify that the input parameters are correct // If not, return STATUS_INVALID_PARAMETER // TODO: Handle the the MP3TESTA_IOCTL_800 request, or // defer the processing of the IRP (i.e. by queuing) and set // status to STATUS_PENDING. // TODO: Assuming that the request was handled here. Set I.Information // to indicate how much data to copy back to the user. //########################### PURB pUrb; UCHAR buffer[8]; memset(buffer,0,8); buffer[0]=cBufferA; buffer[1]=cBufferB; buffer[2]=3; buffer[3]=4; buffer[4]=5; buffer[5]=6; buffer[6]=7; buffer[7]=8; /* pUrb=m_Lower.BuildVendorRequest( buffer, 8, 0, 1, 0xabcd, FALSE, FALSE, NULL, 0, URB_FUNCTION_VENDOR_ENDPOINT ); */ //the command of Bulk-Only Mass Storage Reset pUrb=m_Lower.BuildClassRequest( NULL, 0, 0, 255, 0, FALSE, FALSE, NULL, 0, URB_FUNCTION_CLASS_INTERFACE, NULL ); /* //Get Max LUN pUrb=m_Lower.BuildClassRequest( buffer, 1, 0, 254, 0, TRUE, FALSE, NULL, 0, URB_FUNCTION_CLASS_INTERFACE, NULL ); */ if (pUrb==NULL) { status=STATUS_INSUFFICIENT_RESOURCES; t << \"xxxxx:MP3TESTA_IOCTL_800_Handler, insufficient resources \" << EOL; } else { //submit the URB to USBD status=m_Lower.SubmitUrb(pUrb); t << \"xxxxx:MP3TESTA_IOCTL_800_Handler, submit the URB and the status is \" << status << EOL; t << \"xxxxx:MP3TESTA_IOCTL_800_Handler, the max LUN is \" << buffer[0] << EOL; delete pUrb; } //########################### I.Information() = 0; return status; } |
|
|
5楼#
发布于:2003-10-16 16:13
谢谢,其实我说的主要是固件侧该如何动作。
|
|
6楼#
发布于:2003-10-16 17:25
从端点0out来了个数据包,判断数据包是不是setup包,是,去执行setup包的函数。
不是,判断有没有数据,有读进来,没有返回ack。 嘿嘿,好象是,不太记得了。 :D |
|
7楼#
发布于:2003-10-16 17:57
有这样的例子吗?通过ep0写一个值给外设的例子
|
|
8楼#
发布于:2003-10-18 08:56
斑竹来看看我的问题吧,我这个问题一直不知道如何解决啊,我提出来几天了,但是一直没有解决,希望提供帮助
|
|