阅读:7928回复:29
Philips PDIUSBD12编程
打开USB设备
// USB Get device name procedure int TianUSB::USB_GetDeviceName() { GUID mGuid = GUID_CLASS_PDIUSBD12_BULK; HDEVINFO hInfo; int i = 0; char name[MAX_PATH]; // Get device information set获取设备信息集合 hInfo = SetupDiGetClassDevs(&mGuid,NULL,NULL,DIGCF_PRESENT | DIGCF_INTERFACEDEVICE); if(hInfo == INVALID_HANDLE_VALUE) { // Cannot find USB device return 0; } for (i=0; ; ++i) { SP_INTERFACE_DEVICE_DATA Interface_Info; // interface information data Interface_Info.cbSize = sizeof(Interface_Info); // Enumerate device枚举设备 if (!SetupDiEnumInterfaceDevice(hInfo, NULL, (LPGUID) &mGuid,i, &Interface_Info)) { // Enumerate fail SetupDiDestroyDeviceInfoList(hInfo); m_nUsbNumber = i; return(i); } DWORD needed; // get the required lenght SetupDiGetInterfaceDeviceDetail(hInfo, &Interface_Info, NULL, 0, &needed, NULL); PSP_INTERFACE_DEVICE_DETAIL_DATA detail = (PSP_INTERFACE_DEVICE_DETAIL_DATA) malloc(needed); if (!detail) { SetupDiDestroyDeviceInfoList(hInfo); m_nUsbNumber = i; return(i); } // fill the device details detail->cbSize = sizeof(SP_INTERFACE_DEVICE_DETAIL_DATA); if (!SetupDiGetInterfaceDeviceDetail(hInfo, &Interface_Info,detail, needed,NULL, NULL)) { free((PVOID) detail); SetupDiDestroyDeviceInfoList(hInfo); m_nUsbNumber = i; return(i); } strncpy(name, detail->DevicePath, sizeof(name)); free((PVOID) detail); m_strDeviceName = name; // keep a copy of each device name } // end of for loop SetupDiDestroyDeviceInfoList(hInfo); m_nUsbNumber = i; return i; } // Open USB device HANDLE TianUSB::USB_OpenDevice() { HANDLE hUsb; HANDLE hDevice; CString strDevice; IO_BLOCK ioBlock; BOOLEAN bResult = FALSE; ULONG nBytes = 0; char c; int i; if(!USB_GetDeviceName()) return NULL; for(i=0;i<m_nUsbNumber;i++) { // 利用设备名加端口名(PIPE00)打开USB设备-->文件句柄 strDevice = m_strDeviceName; strDevice += "\\PIPE1"; hUsb = CreateFile(strDevice,GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL ); if(hUsb) break; } hMyUsb = hUsb; if(hUsb != INVALID_HANDLE_VALUE) { if(!USB_GetDeviceName()) return NULL; for(i=0;i<m_nUsbNumber;i++) { // 利用设备名加端口名(PIPE00)打开USB设备-->文件句柄 strDevice = m_strDeviceName; strDevice += "\\PIPE00"; hDevice = CreateFile(strDevice,GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL ); //DWORD t=IOCTL_READ_REGISTERS; bResult = DeviceIoControl(hDevice, // device handle IOCTL_READ_REGISTERS, // control code (PVOID)&ioBlock, // input buffer sizeof(IO_BLOCK), // input buffer size in byte (PVOID)&c, // output buffer 1, // output buffer size in byte &nBytes, // return output buffer length in byte NULL); // overlapped structure if(bResult == FALSE) { UINT err = GetLastError(); CloseHandle(hUsb); CloseHandle(hDevice); } } } return hUsb; } |
|
最新喜欢:![]() |
沙发#
发布于:2005-07-21 13:50
PDIUSBD12 连接过程1
D12Ep0OutProc() 1 last status i = 21 80 6 0 1 0 0 12 0 USB_DEVICE_DESCRIPTOR_TYPE full 1 12 1 10 1 0 0 0 10 71 4 22 2 13 1 0 0 D12Ep0InProc() 2 D12Ep0InProc() USB_TRANSMIT 0 1 D12Ep0OutProc() 3 last status i = a1 80 6 0 2 0 0 9 0 USB_CONFIGURATION_DESCRIPTOR_TYPE 1 only descriptro 9 20 2e 0 1 1 0 80 32 D12Ep0InProc() 3 D12Ep0InProc() USB_IDLE D12Ep0OutProc() 1 last status i = a1 80 6 0 2 0 0 2e 0 USB_CONFIGURATION_DESCRIPTOR_TYPE 1 only descriptro 9 20 2e 0 1 1 0 80 32 D12Ep0OutProc() 3 D12Ep0InProc() 3 D12Ep0InProc() USB_IDLE |
|
板凳#
发布于:2005-07-21 13:50
PDIUSBD12 连接过程2
Find Pdiusbd12, chip id = 0x1210D12BusRstProc() c0 D12SuspendProc() c0 D12SuspendProc() 80 D12BusRstProc() c0 D12SuspendProc() c0 D12SuspendProc() 80 D12BusRstProc() c0 D12SuspendProc() c0 D12Ep0OutProc() 1 80 6 0 1 0 0 40 0 @12 1 10 1 0 0 0 10 71 4 22 2 13 1 0 0 D12BusRstProc() 40 D12Ep0OutProc() 1 0 5 1 0 0 0 0 0 D12Ep1IntProc() 2 D12Ep0OutProc() 1 80 6 0 1 0 0 12 0 @12 1 10 1 0 0 0 10 71 4 22 2 13 1 0 0 D12Ep1IntProc() 2 @0 1 D12Ep0OutProc() 3 80 6 0 2 0 0 9 0 @9 2 20 0 1 1 0 80 32 D12Ep1IntProc() 3 D12Ep0OutProc() 1 80 6 0 2 0 0 ff 0 @9 2 20 0 1 1 0 80 32 9 4 0 0 2 8 4 D12Ep1IntProc() 2 @50 0 7 5 82 2 40 0 0 7 5 2 2 40 0 0 D12Ep1IntProc() 2 @ D12Ep1IntProc() 2 D12Ep0OutProc() 1 D12Ep0OutProc() 1 80 6 0 1 0 0 12 0 @12 1 10 1 0 0 0 10 71 4 22 2 13 1 0 0 D12Ep1IntProc() 2 @0 1 D12Ep0OutProc() 3 80 6 0 2 0 0 9 0 @9 2 20 0 1 1 0 80 32 D12Ep1IntProc() 3 D12Ep0OutProc() 1 80 6 0 2 0 0 20 0 @9 2 20 0 1 1 0 80 32 9 4 0 0 2 8 4 D12Ep1IntProc() 2 @50 0 7 5 82 2 40 0 0 7 5 2 2 40 0 0 D12Ep0OutProc() 3 0 9 1 0 0 0 0 0 D12Ep1IntProc() 3 |
|
地板#
发布于:2005-07-21 16:14
PDIUSBD12编程INF文件
There must have no GUID code in INF file.Or IoCallDriver will return fail when you pass IRP to lower driver.Error code 0XC0000001 == unsuccessful |
|
地下室#
发布于:2005-07-22 09:51
Open USB device handle
//header files#include <stdlib.h> #include <stdio.h> #include <windows.h> #include <winioctl.h> #include "..\UsbTestioctl.h" #include "..\UsbTestDeviceinterface.h" // Has class GUID definition // This function is found in module OpenByIntf.cpp HANDLE OpenByInterface(GUID* pClassGuid, DWORD instance, PDWORD pError); //Open USB device handle hDevice = OpenByInterface( &ClassGuid, 0, &Error); |
|
5楼#
发布于:2005-07-22 10:28
楼主 我是新手 请问您这个程序是用来作什么的 可以直接用在d12的开发板上吗?
|
|
6楼#
发布于:2005-07-22 11:33
Why cannot you read USB device?
// previous codeh = CreateFile(completeDeviceName, GENERIC_WRITE,// | GENERIC_READ, FILE_SHARE_WRITE,// | FILE_SHARE_READ, NULL, OPEN_EXISTING, // FILE_FLAG_OVERLAPPED, 0, NULL); // current code h = CreateFile(completeDeviceName, GENERIC_WRITE | GENERIC_READ, FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, OPEN_EXISTING, // FILE_FLAG_OVERLAPPED, 0, NULL); // Now I can readfile USB device port |
|
7楼#
发布于:2005-07-22 11:49
楼主 我是新手 请问您这个程序是用来作什么的 可以直接用在d12的开发板上吗?
你问的好!我也是个新手,第一次写开发板(Embeded ARM7)驱动.PC驱动以及PC的USB应用程序.以上都是本人在周立功和仙林电子的ARM D12开发板上实现了的.才上传的. PDIUSBD12 连接过程1 => 周立功 PDIUSBD12 连接过程2 => 仙林电子 本人热心于建立最丰富的USB开发资源.希望各位热心参与.Now I can readfile and writefile USB device port.愿共同进步的热心人,可以邮件联系讨论.tianrongcai@sohu.com |
|
8楼#
发布于:2005-07-22 12:01
PC side driver setup procedure(DriverMonitor)
73.099772 Default BulkUsb: BulkUsb: BulkUsb: Enter BulkUsb_GetRegistryDword() RegPath = \REGISTRY\Machine\System\CurrentControlSet\SERVICES\BULKUSB\Parameters73.099772 Default ValueName =DebugLevel 73.099798 Default BulkUsb: BulkUsb_GetRegistryDword() path= \REGISTRY\Machine\System\CurrentControlSet\SERVICES\BULKUSB\Parameters 73.099862 Default BulkUsb: BulkUsb_GetRegistryDWord() STATUS_OBJECT_NAME_NOT_FOUND 73.099880 Default BulkUsb: Entering DriverEntry(), RegistryPath= 73.099880 Default \REGISTRY\MACHINE\SYSTEM\ControlSet004\Services\D12TEST 73.099898 Default BulkUsb: exiting DriverEntry (0) 73.100380 Default BulkUsb: enter BulkUsb_PnPAddDevice() 73.100391 Default BulkUsb: enter BulkUsb_CreateDeviceObject() 73.100403 Default BulkUsb: Enter BulkUsb_SymbolicLink() 73.101903 Default BulkUsb: 73.102299 Default BulkUsb: SUCCEEDED IoSetDeviceInterfaceState() 73.102321 Default BulkUsb: BulkUsb_CreateDeviceObject() SUCCESS Create GUID_CLASS_BulkUsb_BULK-based Device name 73.102321 Default \??\USB#Vid_0471&Pid_0222#5&2fd9258d&0&2#{77f49320-16ef-11d2-ad51-006097b514dd} 73.102321 Default Length decimal 158, MaximumLength decimal 160 73.102407 Default BulkUsb: Enter BulkUsb_GetRegistryDword() RegPath = \REGISTRY\Machine\System\CurrentControlSet\SERVICES\BULKUSB\Parameters 73.102407 Default ValueName =MaximumTransferSize 73.102433 Default BulkUsb: BulkUsb_GetRegistryDword() path= \REGISTRY\Machine\System\CurrentControlSet\SERVICES\BULKUSB\Parameters 73.102483 Default BulkUsb: BulkUsb_GetRegistryDWord() STATUS_OBJECT_NAME_NOT_FOUND 73.102512 Default BulkUsb: BulkUsb_QueryCapabilities() ntStatus from IoCallDriver to PCI = 0x0 73.102533 Default BulkUsb: Enter BulkUsb_GetRegistryDword() RegPath = \REGISTRY\Machine\System\CurrentControlSet\SERVICES\BULKUSB\Parameters 73.102533 Default ValueName =PowerDownLevel 73.102559 Default BulkUsb: BulkUsb_GetRegistryDword() path= \REGISTRY\Machine\System\CurrentControlSet\SERVICES\BULKUSB\Parameters 73.102596 Default BulkUsb: BulkUsb_GetRegistryDWord() STATUS_OBJECT_NAME_NOT_FOUND 73.102609 Default BulkUsb: >>>>>> DeviceCaps 73.102620 Default BulkUsb: SystemWake = PowerSystemSleeping1 73.102632 Default BulkUsb: DeviceWake = PowerDeviceD0 73.102644 Default BulkUsb: Device State Map: sysstate PowerSystemUnspecified = devstate PowerDeviceUnspecified 73.102661 Default BulkUsb: Device State Map: sysstate PowerSystemWorking = devstate PowerDeviceD0 73.102677 Default BulkUsb: Device State Map: sysstate PowerSystemSleeping1 = devstate PowerDeviceD3 73.102693 Default BulkUsb: Device State Map: sysstate PowerSystemSleeping2 = devstate PowerDeviceD3 73.102709 Default BulkUsb: Device State Map: sysstate PowerSystemSleeping3 = devstate PowerDeviceD3 73.102725 Default BulkUsb: Device State Map: sysstate PowerSystemHibernate = devstate PowerDeviceD3 73.102741 Default BulkUsb: Device State Map: sysstate PowerSystemShutdown = devstate PowerDeviceD3 73.102756 Default BulkUsb: <<<<<<<<DeviceCaps 73.102767 Default BulkUsb: Enter BulkUsb_IncrementIoCount() Pending io count = 0 73.102781 Default BulkUsb: Exit BulkUsb_IncrementIoCount() Pending io count = 1 73.102796 Default BulkUsb: Enter BulkUsb_SelfSuspendOrActivate(),fSuspend = 1 73.102810 Default BulkUsb: **** FALSE return from BulkUsb_CanAcceptIoRequests()! 73.102823 Default BulkUsb: ABORTING BulkUsb_SelfSuspendOrActivate() 73.102836 Default BulkUsb: exit BulkUsb_PnPAddDevice() (0) 73.102872 Default BulkUsb: enter BulkUsb_ProcessPnPIrp() IRP_MJ_PNP, minor PowerSystemWorking 73.102887 Default BulkUsb: Enter BulkUsb_IncrementIoCount() Pending io count = 1 73.102901 Default BulkUsb: Exit BulkUsb_IncrementIoCount() Pending io count = 2 73.102915 Default BulkUsb: BulkUsb_ProcessPnPIrp() Minor PnP IOCTL not handled 73.102929 Default BulkUsb: BulkUsb_ProcessPnPIrp() Passing PnP Irp down, status = 0 73.102951 Default BulkUsb: Exit BulkUsb_DecrementIoCount() Pending io count = 1 73.102966 Default BulkUsb: BulkUsb_ProcessPnPIrp() Exit BulkUsb_ProcessPnPIrp c00000bb 73.103143 Default BulkUsb: enter BulkUsb_ProcessPnPIrp() IRP_MJ_PNP, minor IRP_MN_QUERY_RESOURCE_REQUIREMENTS 73.103161 Default BulkUsb: Enter BulkUsb_IncrementIoCount() Pending io count = 1 73.103175 Default BulkUsb: Exit BulkUsb_IncrementIoCount() Pending io count = 2 73.103190 Default BulkUsb: BulkUsb_ProcessPnPIrp() Minor PnP IOCTL not handled 73.103204 Default BulkUsb: BulkUsb_ProcessPnPIrp() Passing PnP Irp down, status = 0 73.103304 Default BulkUsb: Exit BulkUsb_DecrementIoCount() Pending io count = 1 73.103319 Default BulkUsb: BulkUsb_ProcessPnPIrp() Exit BulkUsb_ProcessPnPIrp 0 73.103411 Default BulkUsb: enter BulkUsb_ProcessPnPIrp() IRP_MJ_PNP, minor IRP_MN_FILTER_RESOURCE_REQUIREMENTS 73.103429 Default BulkUsb: Enter BulkUsb_IncrementIoCount() Pending io count = 1 73.103443 Default BulkUsb: Exit BulkUsb_IncrementIoCount() Pending io count = 2 73.103457 Default BulkUsb: BulkUsb_ProcessPnPIrp() Minor PnP IOCTL not handled 73.103471 Default BulkUsb: BulkUsb_ProcessPnPIrp() Passing PnP Irp down, status = 0 73.103491 Default BulkUsb: Exit BulkUsb_DecrementIoCount() Pending io count = 1 73.103506 Default BulkUsb: BulkUsb_ProcessPnPIrp() Exit BulkUsb_ProcessPnPIrp c00000bb 73.103529 Default BulkUsb: enter BulkUsb_ProcessPnPIrp() IRP_MJ_PNP, minor IRP_MN_START_DEVICE 73.103544 Default BulkUsb: Enter BulkUsb_IncrementIoCount() Pending io count = 1 73.103558 Default BulkUsb: Exit BulkUsb_IncrementIoCount() Pending io count = 2 73.105597 Default BulkUsb: enter BulkUsb_StartDevice 73.105611 Default BulkUsb: BULKUSB_ExAllocatePool() gExAllocCount = dec 1 73.105625 Default BulkUsb: BULKUSB_ExAllocatePool() gExAllocCount = dec 2 73.105639 Default BulkUsb: enter BulkUsb_CallUSBD 73.105713 Default BulkUsb: BulkUsb_CallUSBD() return from IoCallDriver USBD 103 73.105753 Default BulkUsb: enter BulkUsb_ProcessSysControlIrp() 73.105767 Default BulkUsb: Enter BulkUsb_IncrementIoCount() Pending io count = 2 73.105781 Default BulkUsb: Exit BulkUsb_IncrementIoCount() Pending io count = 3 73.105802 Default BulkUsb: Exit BulkUsb_DecrementIoCount() Pending io count = 2 73.105816 Default BulkUsb: BulkUsb_ProcessSysControlIrp() Exit BulkUsb_ProcessSysControlIrp 0 73.148694 Default BulkUsb: BulkUsb_CallUSBD() URB status = 0 status = 0 irp status 0 73.148710 Default BulkUsb: Device Descriptor = 82af6a00, len 12 73.148722 Default BulkUsb: I82930 Device Descriptor: 73.148734 Default BulkUsb: ------------------------- 73.148746 Default BulkUsb: bLength 18 73.148756 Default BulkUsb: bDescriptorType 0x1 73.148767 Default BulkUsb: bcdUSB 0x110 73.148777 Default BulkUsb: bDeviceClass 0x0 73.148787 Default BulkUsb: bDeviceSubClass 0x0 73.148797 Default BulkUsb: bDeviceProtocol 0x0 73.148808 Default BulkUsb: bMaxPacketSize0 0x10 73.148818 Default BulkUsb: idVendor 0x471 73.148828 Default BulkUsb: idProduct 0x222 73.148838 Default BulkUsb: bcdDevice 0x113 73.148848 Default BulkUsb: iManufacturer 0x0 73.148858 Default BulkUsb: iProduct 0x0 73.148868 Default BulkUsb: iSerialNumber 0x0 73.148878 Default BulkUsb: bNumConfigurations 0x1 73.148890 Default BulkUsb: BULKUSB_ExFreePool() gExAllocCount = dec 1 73.148903 Default BulkUsb: enter BulkUsb_ConfigureDevice 73.148916 Default BulkUsb: BULKUSB_ExAllocatePool() gExAllocCount = dec 2 73.148930 Default BulkUsb: BULKUSB_ExAllocatePool() gExAllocCount = dec 3 73.148952 Default BulkUsb: enter BulkUsb_CallUSBD 73.149025 Default BulkUsb: BulkUsb_CallUSBD() return from IoCallDriver USBD 103 73.222686 Default BulkUsb: BulkUsb_CallUSBD() URB status = 0 status = 0 irp status 0 73.222702 Default BulkUsb: BulkUsb_CallUSBD() Configuration Descriptor = 8242b8b0, len 20 73.222718 Default BulkUsb: BULKUSB_ExFreePool() gExAllocCount = dec 2 73.222732 Default BulkUsb: enter BulkUsb_SelectInterface 73.222744 Default BulkUsb: BulkUsb_SelectInterface() called with NULL Interface 73.222761 Default BulkUsb: BULKUSB_ExAllocatePool() gExAllocCount = dec 3 73.222774 Default BulkUsb: enter BulkUsb_CallUSBD 73.288891 Default BulkUsb: BulkUsb_CallUSBD() return from IoCallDriver USBD 0 73.288906 Default BulkUsb: BulkUsb_CallUSBD() URB status = 0 status = 0 irp status 0 73.288922 Default BulkUsb: BULKUSB_ExAllocatePool() gExAllocCount = dec 4 73.288936 Default BulkUsb: --------- 73.288945 Default BulkUsb: NumberOfPipes 0x2 73.288956 Default BulkUsb: Length 0x38 73.288965 Default BulkUsb: Alt Setting 0x0 73.288975 Default BulkUsb: Interface Number 0x0 73.288986 Default BulkUsb: Class, subclass, protocol 0x8 0x4 0x50 73.288998 Default BulkUsb: --------- 73.289007 Default BulkUsb: PipeType 0x2 73.289017 Default BulkUsb: EndpointAddress 0x82 73.289027 Default BulkUsb: MaxPacketSize 0x40 73.289037 Default BulkUsb: Interval 0x0 73.289047 Default BulkUsb: Handle 0x82e9b494 73.289057 Default BulkUsb: MaximumTransferSize 0x100 73.289068 Default BulkUsb: --------- 73.289077 Default BulkUsb: PipeType 0x2 73.289087 Default BulkUsb: EndpointAddress 0x2 73.289097 Default BulkUsb: MaxPacketSize 0x40 73.289107 Default BulkUsb: Interval 0x0 73.289117 Default BulkUsb: Handle 0x82e9b4b4 73.289128 Default BulkUsb: MaximumTransferSize 0x100 73.289138 Default BulkUsb: --------- 73.289150 Default BulkUsb: exit BulkUsb_SelectInterface (0) 73.289162 Default BulkUsb: exit BulkUsb_ConfigureDevice (0) 73.289174 Default BulkUsb: exit BulkUsb_StartDevice (0) 73.289190 Default BulkUsb: Exit BulkUsb_DecrementIoCount() Pending io count = 1 73.289883 Default BulkUsb: enter BulkUsb_ProcessPnPIrp() IRP_MJ_PNP, minor IRP_MN_QUERY_CAPABILITIES 73.289900 Default BulkUsb: Enter BulkUsb_IncrementIoCount() Pending io count = 1 73.289915 Default BulkUsb: Exit BulkUsb_IncrementIoCount() Pending io count = 2 73.289929 Default BulkUsb: BulkUsb_ProcessPnPIrp() Minor PnP IOCTL not handled 73.289944 Default BulkUsb: BulkUsb_ProcessPnPIrp() Passing PnP Irp down, status = 0 73.289972 Default BulkUsb: Exit BulkUsb_DecrementIoCount() Pending io count = 1 73.289986 Default BulkUsb: BulkUsb_ProcessPnPIrp() Exit BulkUsb_ProcessPnPIrp 0 73.290088 Default BulkUsb: enter BulkUsb_ProcessPnPIrp() IRP_MJ_PNP, minor IRP_MN_QUERY_BUS_INFORMATION 73.290105 Default BulkUsb: Enter BulkUsb_IncrementIoCount() Pending io count = 1 73.290119 Default BulkUsb: Exit BulkUsb_IncrementIoCount() Pending io count = 2 73.290133 Default BulkUsb: BulkUsb_ProcessPnPIrp() Minor PnP IOCTL not handled 73.290147 Default BulkUsb: BulkUsb_ProcessPnPIrp() Passing PnP Irp down, status = 0 73.290169 Default BulkUsb: Exit BulkUsb_DecrementIoCount() Pending io count = 1 73.290183 Default BulkUsb: BulkUsb_ProcessPnPIrp() Exit BulkUsb_ProcessPnPIrp 0 73.290204 Default BulkUsb: enter BulkUsb_ProcessPnPIrp() IRP_MJ_PNP, minor IRP_MN_QUERY_DEVICE_RELATIONS 73.290220 Default BulkUsb: Enter BulkUsb_IncrementIoCount() Pending io count = 1 73.290234 Default BulkUsb: Exit BulkUsb_IncrementIoCount() Pending io count = 2 73.290248 Default BulkUsb: BulkUsb_ProcessPnPIrp() Minor PnP IOCTL not handled 73.290261 Default BulkUsb: BulkUsb_ProcessPnPIrp() Passing PnP Irp down, status = 0 73.290280 Default BulkUsb: Exit BulkUsb_DecrementIoCount() Pending io count = 1 73.290294 Default BulkUsb: BulkUsb_ProcessPnPIrp() Exit BulkUsb_ProcessPnPIrp c00000bb Monitor ERROR (6): No driver is currently open. Monitor -- end -- |
|
9楼#
发布于:2005-07-23 09:36
楼主 能不能把您的程序打包发一个下载 我想试一试
上面您发的几个程序我不知道如何组织成一个应用程序 不太看的懂 请帮帮忙吧 谢谢 |
|
10楼#
发布于:2005-07-23 13:03
你首先发表.设备描述符与驱动程序的关系.我才会告诉你,否则告诉你也是浪费.因为我一修改描述符.ReadFile and WriteFile 就不成功.仙林电子与周立功的描述符相比.仙林电子的少了端点1的描述符.况且驱动程序不变.你起码要做点贡献.不光只是拿...,否则开发资料哪里来?
|
|
11楼#
发布于:2005-07-23 16:28
周立功的端点描述符有错
OffsetField Size Value Description 0 bLength 1 Number Size of Descriptor in Bytes (7 bytes) 1 bDescriptorType 1 Constant Endpoint Descriptor (0x05) 2 bEndpointAddress 1 Endpoint Endpoint Address Bits 0..3b Endpoint Number. Bits 4..6b Reserved. Set to Zero Bits 7 Direction 0 = Out, 1 = In (Ignored for Control Endpoints) 3 bmAttributes 1 Bitmap Bits 0..1 Transfer Type 00 = Control 01 = Isochronous 10 = Bulk 11 = Interrupt Bits 2..7 are reserved. If Isochronous endpoint, Bits 3..2 = Synchronisation Type (Iso Mode) 00 = No Synchonisation 01 = Asynchronous 10 = Adaptive 11 = Synchronous Bits 5..4 = Usage Type (Iso Mode) 00 = Data Endpoint 01 = Feedback Endpoint 10 = Explicit Feedback Data Endpoint 11 = Reserved 4 wMaxPacketSize 2 Number Maximum Packet Size this endpoint is capable of sending or receiving 6 bInterval 1 Number Interval for polling endpoint data transfers. Value in frame counts. Ignored for Bulk & Control Endpoints. Isochronous must equal 1 and field may range from 1 to 255 for interrupt endpoints. //端点2输出 { sizeof(USB_ENDPOINT_DESCRIPTOR), //端点描述符长度,= 07H USB_ENDPOINT_DESCRIPTOR_TYPE, //端点描述符类型,= 05H 0x2, //端点2 IN USB_ENDPOINT_TYPE_BULK, //批量传输,= 02H EP2_PACKET_SIZE,0x00, //端点最大包的大小,= 0040H 10 //批量传输时该设备无效 } 错端点最大包的大小为0,见以上的USB端点描述符标准. |
|
12楼#
发布于:2005-07-23 16:33
周立功的端点描述符有错
上贴不是端点最大包的大小为0的错,而是传输查询间隔应该为0,因为是BULK传输. |
|
13楼#
发布于:2005-07-23 17:21
我已经把周立功的描述符放到正常的ARM程序中测试.ReadFile and WriteFile are normal.证明我对D12的操作掌握不够多.因此应该集中精力了解D12的操作.
|
|
14楼#
发布于:2005-07-23 17:28
ReadFile时 D12的响应
D12Ep3IntProc() 8 D12Ep3IntProc() 8 本例子.没有上传数据给PC,Endpoit1为中断模式.D12产生Endpoit1 的IN中断.要求上传数据. |
|
15楼#
发布于:2005-07-23 17:36
Pipe and EndPoint Relationship
{{ // //设备描述符 UsbDevDescSize, UsbDevDescType, 0x110, // version v1.10 0xDC, 0, 0, Ep0PacketSize, 0x471, //PHILIPS公司的设备ID 0x222, 0x0001, 0, 0, 0, 1 //可能的配置数 1个 }, { //配置描述符 UsbCfgDescSize, UsbCfgDescType, //UsbTotalCfgDescSize, 0, 0x2E,0x00, 1, 1, 0, 0x60, 0x32 }, { //接口描述符 UsbItfDescSize, UsbItfDescType, 0, 0, EndpCnt, // 4 0xDC, 0xA0, 0xB0, 0 }, { //端点1输入 UsbEndpDescSize, UsbEndpDescType, 0x81, UsbEndpBulk, Ep2PacketSize, 0, 10 }, { //端点1输出 UsbEndpDescSize, UsbEndpDescType, 0x1, UsbEndpBulk, Ep2PacketSize, 0, 10 }, { //端点2输入 UsbEndpDescSize, UsbEndpDescType, 0x82, UsbEndpBulk, Ep2PacketSize, 0, 10 }, { //端点2输出 UsbEndpDescSize, UsbEndpDescType, 0x2, UsbEndpBulk, Ep2PacketSize, 0, 10 } }; PC收到以上描述符后,PIPE00 对应与ENDPOINT1, PIPE01对应与ENDPOINT2. |
|
16楼#
发布于:2005-07-25 12:03
PDIUSBD12编程 PIPE00 ~ PIPE03
PIPE00 and PIPE02 are all readfile handle.PIPE01 and PIPE03 are all writefile handle.Whichever PIPE handle for DeviceIoControl is corresponding to EndPoint0.How Strange. |
|
17楼#
发布于:2005-07-25 14:19
本例子驱动程序是异步IO操作.用函数BulkUsb_BuildAsyncRequest()建立异步读写请求.因此CreateFile,ReadFile and WriteFile OVERLAPPED 不能为NULL.
|
|
18楼#
发布于:2005-07-25 16:50
PDIUSBD12速度慢,设备句柄有时需要连续打开数百次才能成功!
|
|
19楼#
发布于:2005-07-26 16:30
#pragma PAGEDCODE
NTSTATUS SendAwaitUrb(PDEVICE_OBJECT fdo, PURB urb, UINT8 timeout) { // SendAwaitUrb PAGED_CODE(); ASSERT(KeGetCurrentIrql() == PASSIVE_LEVEL); PDEVICE_EXTENSION pdx = (PDEVICE_EXTENSION) fdo->DeviceExtension; KEVENT event; KeInitializeEvent(&event, NotificationEvent, FALSE); IO_STATUS_BLOCK iostatus; PIRP Irp = IoBuildDeviceIoControlRequest(IOCTL_INTERNAL_USB_SUBMIT_URB, pdx->LowerDeviceObject, NULL, 0, NULL, 0, TRUE, &event, &iostatus); if (!Irp) { KdPrint((DRIVERNAME " - Unable to allocate IRP for sending URB\n")); return STATUS_INSUFFICIENT_RESOURCES; } PIO_STACK_LOCATION stack = IoGetNextIrpStackLocation(Irp); stack->Parameters.Others.Argument1 = (PVOID) urb; if(timeout != 0) IoSetCompletionRoutine(Irp, OnComplete, (PVOID)&event, TRUE, TRUE, TRUE); NTSTATUS status = IoCallDriver(pdx->LowerDeviceObject, Irp); if (status == STATUS_PENDING) { if(timeout != 0) { KdPrint((DRIVERNAME " - timeout: %x \n", timeout)); //the received timeout is in seconds. We'll have to transform it in //units of 100ns. LARGE_INTEGER dueTime; dueTime.QuadPart = -10000000 * timeout; status = KeWaitForSingleObject(&event, Executive, KernelMode, FALSE, &dueTime); if(status == STATUS_TIMEOUT) { KdPrint((DRIVERNAME " - KeWaitForSingleObject returned STATUS_TIMEOUT! \n")); IoCancelIrp(Irp); KeWaitForSingleObject(&event, Executive, KernelMode, FALSE, NULL); } KdPrint((DRIVERNAME " - KeWaitForSingleObject finished successfully! \n")); } else { KeWaitForSingleObject(&event, Executive, KernelMode, FALSE, NULL); status = iostatus.Status; } } if(timeout != 0) IoCompleteRequest(Irp, IO_NO_INCREMENT); return status; } // SendAwaitUrb #pragma PAGEDCODE NTSTATUS OnComplete(PDEVICE_OBJECT devObject, PIRP Irp, PVOID pevent) { if(Irp->PendingReturned) KeSetEvent((PKEVENT)pevent, IO_NO_INCREMENT, FALSE); return STATUS_MORE_PROCESSING_REQUIRED; } |
|
上一页
下一页