社区
硬件/系统
帖子详情
求教各位,本人使用USB D12 philips执行读操作碰到一个奇怪的问题?
taixinltd
2009-08-11 05:45:03
求教各位,本人使用USB D12 执行读操作碰到一个奇怪的问题?
我在使用ReadFile(hDev,pData,256,0)时,当待接收的数据大小<64或>64时,调用可以返回;
但是当待接收数据等于64时,调用不返回,一直阻塞在那里;不知道什么原因?
...全文
130
12
打赏
收藏
求教各位,本人使用USB D12 philips执行读操作碰到一个奇怪的问题?
求教各位,本人使用USB D12 执行读操作碰到一个奇怪的问题? 我在使用ReadFile(hDev,pData,256,0)时,当待接收的数据大小64时,调用可以返回; 但是当待接收数据等于64时,调用不返回,一直阻塞在那里;不知道什么原因?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
用户 昵称
2010-03-05
打赏
举报
回复
是固件的问题吧,当数据长度是端点容量的时候,应该再发一个空包,否则usb协议栈就死等这个空包了。
俺认为当长度是128, 192时,也有可能出现这个问题。
taixinltd
2009-08-13
打赏
举报
回复
NTSTATUS ntStatus = STATUS_SUCCESS;
PD12_PIPE pipeHandle = NULL;
PFILE_OBJECT fileObject;
PIO_STACK_LOCATION irpStack, nextStack;
PDEVICE_EXTENSION deviceExtension;
PURB urb;
PD12_RW_CONTEXT context = NULL;
D12_KdPrint (("D12TEST.SYS: enter D12_Read\n"));
D12_IncrementIoCount(DeviceObject);
deviceExtension = DeviceObject->DeviceExtension;
if (deviceExtension->AcceptingRequests == FALSE) {
ntStatus = STATUS_DELETE_PENDING;
Irp->IoStatus.Status = ntStatus;
Irp->IoStatus.Information = 0;
IoCompleteRequest (Irp,
IO_NO_INCREMENT
);
D12_DecrementIoCount(DeviceObject);
return ntStatus;
}
irpStack = IoGetCurrentIrpStackLocation (Irp);
fileObject = irpStack->FileObject;
pipeHandle = fileObject->FsContext;
if (!pipeHandle) {
ntStatus = STATUS_INVALID_HANDLE;
goto D12_Read_Reject;
}
//
// submit the write request to USB
//
switch (pipeHandle->PipeInfo->PipeType) {
case UsbdPipeTypeIsochronous:
D12_ResetPipe(DeviceObject, pipeHandle, FALSE);
urb = D12_BuildIsoRequest(DeviceObject,
Irp,
pipeHandle,
TRUE);
if (urb) {
nextStack = IoGetNextIrpStackLocation(Irp);
ASSERT(nextStack != NULL);
ASSERT(DeviceObject->StackSize>1);
nextStack->MajorFunction = IRP_MJ_INTERNAL_DEVICE_CONTROL;
nextStack->Parameters.Others.Argument1 = urb;
nextStack->Parameters.DeviceIoControl.IoControlCode =
IOCTL_INTERNAL_USB_SUBMIT_URB;
IoSetCompletionRoutine(Irp,
D12_IsoReadWrite_Complete,
urb,
TRUE,
TRUE,
TRUE);
D12_KdPrint (("D12TEST.SYS: IRP = 0x%x current = 0x%x next = 0x%x\n",
Irp, irpStack, nextStack));
ntStatus = IoCallDriver(deviceExtension->TopOfStackDeviceObject,
Irp);
goto D12_Read_Done;
} else {
ntStatus = STATUS_INSUFFICIENT_RESOURCES;
}
break;
case UsbdPipeTypeInterrupt:
case UsbdPipeTypeBulk:
urb = D12_BuildAsyncRequest(DeviceObject,
Irp,
pipeHandle,
TRUE);
if (urb) {
context = ExAllocatePool(NonPagedPool, sizeof(D12_RW_CONTEXT));
}
if (urb && context) {
context->Urb = urb;
context->DeviceObject = DeviceObject;
nextStack = IoGetNextIrpStackLocation(Irp);
ASSERT(nextStack != NULL);
ASSERT(DeviceObject->StackSize>1);
nextStack->MajorFunction = IRP_MJ_INTERNAL_DEVICE_CONTROL;
nextStack->Parameters.Others.Argument1 = urb;
nextStack->Parameters.DeviceIoControl.IoControlCode =
IOCTL_INTERNAL_USB_SUBMIT_URB;
IoSetCompletionRoutine(Irp,
D12_AsyncReadWrite_Complete,
context,
TRUE,
TRUE,
TRUE);
D12_KdPrint (("D12TEST.SYS: IRP = 0x%x current = 0x%x next = 0x%x\n",
Irp, irpStack, nextStack));
D12_AddPendingIrp(DeviceObject, Irp);
ntStatus = IoCallDriver(deviceExtension->TopOfStackDeviceObject,
Irp);
goto D12_Read_Done;
} else {
ntStatus = STATUS_INSUFFICIENT_RESOURCES;
}
break;
default:
ntStatus = STATUS_INVALID_PARAMETER;
TRAP();
}
D12_Read_Reject:
Irp->IoStatus.Status = ntStatus;
Irp->IoStatus.Information = 0;
IoCompleteRequest (Irp,
IO_NO_INCREMENT
);
D12_Read_Done:
return ntStatus;
taixinltd
2009-08-13
打赏
举报
回复
够
socoola
2009-08-11
打赏
举报
回复
是否是读的数据长度本来就不够64?
MoXiaoRab
2009-08-11
打赏
举报
回复
驱动里面IRP_MJ_READ的派发函数贴出来看看
taixinltd
2009-08-11
打赏
举报
回复
256
bohut
2009-08-11
打赏
举报
回复
CreateFile时设定的缓存区大小是多少?
圈圈教你玩
USB
5.5.3从设备信息集合中获取
一个
设备接口信息的函数 5.5.4获取指定设备接口详细信息的函数 5.5.5打开设备的函数 5.5.6获取HID设备属性的函数 5.5.7从设备
读
取数据的函数 5.5.8往设备写数据的函数 5.5.9通过控制端点O...
【已解决】计算机丢失d3
d12
.dll怎么办?d3
d12
.dll加载失败怎么办
如果你在
使用
电脑时遇到D3
D12
.dll文件丢失了,不用着急,
使用
小编带来的这款D3
D12
.dll文件修复工具就能轻松解决
问题
了。D3
D12
.dll是存放在windows系统中至关重要的dll文件,缺少该文件可能会对造成系统不能正常运行...
深入理解D3
D12
资源状态转换
D3
D12
将资源状态管理从图形API层移交到应用...RT是写状态,SRV是
读
状态,因此我们需要建立
一个
转换屏障,保证写
操作
完成后再去
读
取资源。 Aliasing barrier D3
D12
允许一块堆内存被多个资源占用,这可以提高内存的利用.
PC与单片机
USB
(
D12
)数据通讯过程描述
在与网友交流
D12
开发心得时,发现有些网友对与PC应用软件与单片机...用户开发的
USB
设备一般不是windows开发的标准设备,而在VC软件中要对
一个
设备进行
操作
,必须先用CreateFile函数打开设备才能对其进行
读
写
操作
。当
d3
d12
.dll丢失怎么修复-d3
d12
.dll修复工具下载
D3
D12
.dll是
一个
window系统必备的组件,一般系统安装时会自动创建,但是由于盗版系统可能不会安装,因此很多朋友在玩游戏或启动程序时会
碰到
“找不到D3
D12
.dll文件”“无法启动程序,缺失D3
D12
.dll”等
问题
,这有...
硬件/系统
2,640
社区成员
17,239
社区内容
发帖
与我相关
我的任务
硬件/系统
VC/MFC 硬件/系统
复制链接
扫一扫
分享
社区描述
VC/MFC 硬件/系统
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章