阅读:2254回复:19
数据量大于最大传输尺寸怎么办?
如果发送的数据大于最大传输尺寸,应该如何收发数据?
例如最大传输尺寸为2048,但我有65536个数据需要传输,肯定是要分成很多次来传输的,这在驱动程序例如何实现? |
|
沙发#
发布于:2001-09-19 09:43
据说设置的太大,会在某些情况下让你的机子死的很难看!
|
|
|
板凳#
发布于:2001-09-18 18:17
用VC++和Driverworks开发时如何设置MaximumTransferSize=0xffff,
求救!!!!!!!! |
|
地板#
发布于:2001-09-18 11:40
[QUOTE]原本由 LitteSW 发表
[B][QUOTE]原本由 DK-boy 发表 [B] 那为什么BulkUSB中为自己来做下面的工作: // calculate total # of staged irps that will be needed totalIrpsNeeded = totalLength / deviceExtension->MaximumTransferSize ; if ( totalLength % deviceExtension->MaximumTransferSize ) totalIrpsNeeded++; ???? [/B][/QUOTE] 如果WriteFile或ReadFile传入的长度大于65536,则分块。 [/B][/QUOTE] 但是BulkUSB中的deviceExtension->MaximumTransferSize设置为256?为什么不设置为65536? |
|
|
地下室#
发布于:2001-09-17 20:31
[QUOTE]原本由 DK-boy 发表
[B] 那为什么BulkUSB中为自己来做下面的工作: // calculate total # of staged irps that will be needed totalIrpsNeeded = totalLength / deviceExtension->MaximumTransferSize ; if ( totalLength % deviceExtension->MaximumTransferSize ) totalIrpsNeeded++; ???? [/B][/QUOTE] 如果WriteFile或ReadFile传入的长度大于65536,则分块。 |
|
|
5楼#
发布于:2001-09-17 19:50
[QUOTE]原本由 LIUTANG 发表
[B] 谢谢各位老大的帮助,使小弟学到很多东西,谢谢了 [/B][/QUOTE] 不用客气,赶快散分。 |
|
|
6楼#
发布于:2001-09-17 15:51
[QUOTE]原本由 rayyang2000 发表
[B][QUOTE]原本由 DK-boy 发表 [B]你应该在驱动程序分为多个irp传送! [/B][/QUOTE] 没必要。 一方面是在driver初始化的时候,直接设置max transfer size = 65536,还有就是在WriteFile和ReadFile的时候直接读写65536byte的数据,usbd会自己切分的。 [/B][/QUOTE] 那为什么BulkUSB中为自己来做下面的工作: // calculate total # of staged irps that will be needed totalIrpsNeeded = totalLength / deviceExtension->MaximumTransferSize ; if ( totalLength % deviceExtension->MaximumTransferSize ) totalIrpsNeeded++; ???? |
|
|
7楼#
发布于:2001-09-17 13:24
[QUOTE]原本由 LIUTANG 发表
[B] 谢谢各位老大的帮助,使小弟学到很多东西,谢谢了 [/B][/QUOTE] 看你也是性情中人。 希望多交流! |
|
|
8楼#
发布于:2001-09-17 11:39
谢谢各位老大的帮助,使小弟学到很多东西,谢谢了
|
|
9楼#
发布于:2001-09-17 09:58
[QUOTE]原本由 rayyang2000 发表
[B][QUOTE]原本由 DK-boy 发表 [B]你应该在驱动程序分为多个irp传送! [/B][/QUOTE] 没必要。 一方面是在driver初始化的时候,直接设置max transfer size = 65536,还有就是在WriteFile和ReadFile的时候直接读写65536byte的数据,usbd会自己切分的。 [/B][/QUOTE] 那我再请教一个问题; 能否告知程序中具体如何做?注是用DDK开发的USB驱动。 在Set Report Request中的传输多个字节是否也可以这样做??? [DK-boy 编辑于 2001-09-17 10:19] |
|
|
10楼#
发布于:2001-09-16 11:15
[QUOTE]原本由 DK-boy 发表
[B]你应该在驱动程序分为多个irp传送! [/B][/QUOTE] 没必要。 一方面是在driver初始化的时候,直接设置max transfer size = 65536,还有就是在WriteFile和ReadFile的时候直接读写65536byte的数据,usbd会自己切分的。 |
|
|
11楼#
发布于:2001-09-14 19:54
老兄,我说的也是在驱动程序中。
根据你的这种硬件特性,建议使用DeviceIoControl函数,定义一个IOCTOL码。 在对应的CASE语句中,根据最大传输长度进行分块。进行读写操作。 |
|
|
12楼#
发布于:2001-09-14 19:39
谢谢大家的帮助,在应用程序这一层用ReadFile和WriteFile多次调用是可以实现的,但我想在驱动程序这一层实现,不知如何入手,虽然说流程很清楚,但苦于不知道用什么函数来实现,各位高手教我。
在驱动程序这一层实现就可以在ReadFile和WriteFile里指定任意大小的数据量了,否则每次数据量还是不能大于最大传输尺寸。 |
|
13楼#
发布于:2001-09-14 19:33
[QUOTE]原本由 LIUTANG 发表
[B] driverwork的帮助文件讲解的似乎不是很详细,有没有相应的书籍? [/B][/QUOTE] 我在上面已经写了DS下的代码,当然WriteDataToUsbPipe和ReadDataFromUsbPipe两个函数必须由你自己写。 也很简单的。 |
|
|
14楼#
发布于:2001-09-14 15:42
driverwork的帮助文件讲解的似乎不是很详细,有没有相应的书籍?
|
|
15楼#
发布于:2001-09-14 13:09
DDK有例子,
但DriverWorks中不知有没有? 也请DriverWorks的高手出手相助??? |
|
|
16楼#
发布于:2001-09-14 12:55
如果一个IRP所包含的数据量大于最大传输包尺寸,如何在驱动程序里把此IRP分几次发出去?也就是说只调用一次ReadFile 或WriteFile 就能实现大量数据的读写。我看见DDK的例子里是这么做的,但不知道DRIVERWOR的哪些函数和DDK相对应,哪位老大有这方面经验请多指教,最好给点DRIVERWORK的源代码看看,谢谢!
[LIUTANG 编辑于 2001-09-14 12:59] |
|
17楼#
发布于:2001-09-14 12:13
[QUOTE]原本由 LIUTANG 发表
[B] 如果发送的数据大于最大传输尺寸,应该如何收发数据? 例如最大传输尺寸为2048,但我有65536个数据需要传输,肯定是要分成很多次来传输的,这在驱动程序例如何实现? [/B][/QUOTE] #define FRAMELEN 2048 int nPackData = 65536 / FRAMELEN; for(int i = 0; i < nPackData; i++) { WriteDataToUsbPipe("内存首地址" + i * FRAMELEN,FRAMELEN); ReadDataFromUsbPipe("内存首地址"+ i * FRAMELEN,FRAMELEN); } |
|
|
18楼#
发布于:2001-09-14 10:53
你应该在驱动程序分为多个irp传送!
|
|
|
19楼#
发布于:2001-09-14 08:20
如果TD中的数据量大于USB设备ED中的MaxPacketSize,那么USB硬件会把数据分成小块进行传输,每次传输MaxPacketSize个Byte,最后一次的包的数据量可能会小于最大包的大小。
(我是做USB低层的,所以只能有低层的观点来解释,希望对你能有一点帮助。) |
|
|