社区
硬件/系统
帖子详情
求教各位,本人使用USB D12 philips执行读操作碰到一个奇怪的问题?
taixinltd
2009-08-11 05:45:03
求教各位,本人使用USB D12 执行读操作碰到一个奇怪的问题?
我在使用ReadFile(hDev,pData,256,0)时,当待接收的数据大小<64或>64时,调用可以返回;
但是当待接收数据等于64时,调用不返回,一直阻塞在那里;不知道什么原因?
...全文
144
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
调试助手
Usb
Debug.exe
usb
调试助手,
USB
DEBUG是一款
操作
及其简单的
USB
调试工具软件。它能够快速准确的对
USB
设备进行数据的
读
写
操作
,可以实时监测从
USB
设备发来的数据。(目前只支持调试
Philips
公司的PDI
USB
D12
和ISP1581)
USB
转换
D12
接口硬盘项目指南
简介:本项目详细介绍了...项目涉及硬件接口设计、
USB
通信协议和微控制器编程等多个方面,最终实现将IDE接口硬盘通过
USB
读
写,为嵌入式系统设计和硬件接口转换提供了有价值的实践案例。 1. AT89C52微...
【已解决】计算机丢失d3
d12
.dll怎么办?d3
d12
.dll加载失败怎么办
如果你在
使用
电脑时遇到D3
D12
.dll文件丢失了,不用着急,
使用
小编带来的这款D3
D12
.dll文件修复工具就能轻松解决
问题
了。D3
D12
.dll是存放在windows系统中至关重要的dll文件,缺少该文件可能会对造成系统不能正常运行...
PC与单片机
USB
(
D12
)数据通讯过程描述
在与网友交流
D12
开发心得时,发现有些网友对与PC应用软件与单片机...用户开发的
USB
设备一般不是windows开发的标准设备,而在VC软件中要对
一个
设备进行
操作
,必须先用CreateFile函数打开设备才能对其进行
读
写
操作
。当
D3
D12
之CopyEngine
这张图片可以说明很多
问题
,首先可以看到D3
D12
对多线程渲染的支持,每
一个
线程都可以
操作
三种引擎,每个引擎是通过Command Queue来顺序
执行
指令的,每个引擎有自己独立的Queue,因此它们三个是可以并行
操作
的。...
硬件/系统
2,643
社区成员
17,229
社区内容
发帖
与我相关
我的任务
硬件/系统
VC/MFC 硬件/系统
复制链接
扫一扫
分享
社区描述
VC/MFC 硬件/系统
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章