tianrongcai
驱动牛犊
驱动牛犊
  • 注册日期2005-06-24
  • 最后登录2011-03-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望39点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
阅读:7924回复:29

Philips PDIUSBD12编程

楼主#
更多 发布于:2005-07-20 11:28
  打开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;
}

最新喜欢:

r2109twr2109t...
tianrongcai
驱动牛犊
驱动牛犊
  • 注册日期2005-06-24
  • 最后登录2011-03-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望39点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
沙发#
发布于: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
tianrongcai
驱动牛犊
驱动牛犊
  • 注册日期2005-06-24
  • 最后登录2011-03-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望39点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-07-21 13:50
PDIUSBD12 连接过程2
Find Pdiusbd12, chip id = 0x1210
D12BusRstProc() 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
tianrongcai
驱动牛犊
驱动牛犊
  • 注册日期2005-06-24
  • 最后登录2011-03-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望39点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
地板#
发布于: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
tianrongcai
驱动牛犊
驱动牛犊
  • 注册日期2005-06-24
  • 最后登录2011-03-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望39点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
地下室#
发布于: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);
ifyousmell
驱动牛犊
驱动牛犊
  • 注册日期2005-05-15
  • 最后登录2005-08-05
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-07-22 10:28
楼主   我是新手   请问您这个程序是用来作什么的  可以直接用在d12的开发板上吗?
tianrongcai
驱动牛犊
驱动牛犊
  • 注册日期2005-06-24
  • 最后登录2011-03-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望39点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-07-22 11:33
Why cannot you read USB device?
// previous code

h = 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
tianrongcai
驱动牛犊
驱动牛犊
  • 注册日期2005-06-24
  • 最后登录2011-03-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望39点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
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
tianrongcai
驱动牛犊
驱动牛犊
  • 注册日期2005-06-24
  • 最后登录2011-03-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望39点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
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\Parameters
73.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 --
ifyousmell
驱动牛犊
驱动牛犊
  • 注册日期2005-05-15
  • 最后登录2005-08-05
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2005-07-23 09:36
楼主   能不能把您的程序打包发一个下载   我想试一试  
上面您发的几个程序我不知道如何组织成一个应用程序   不太看的懂
请帮帮忙吧  谢谢
tianrongcai
驱动牛犊
驱动牛犊
  • 注册日期2005-06-24
  • 最后登录2011-03-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望39点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2005-07-23 13:03
你首先发表.设备描述符与驱动程序的关系.我才会告诉你,否则告诉你也是浪费.因为我一修改描述符.ReadFile and WriteFile 就不成功.仙林电子与周立功的描述符相比.仙林电子的少了端点1的描述符.况且驱动程序不变.你起码要做点贡献.不光只是拿...,否则开发资料哪里来?
tianrongcai
驱动牛犊
驱动牛犊
  • 注册日期2005-06-24
  • 最后登录2011-03-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望39点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2005-07-23 16:28
周立功的端点描述符有错
Offset
 Field
 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端点描述符标准.
tianrongcai
驱动牛犊
驱动牛犊
  • 注册日期2005-06-24
  • 最后登录2011-03-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望39点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2005-07-23 16:33
周立功的端点描述符有错
上贴不是端点最大包的大小为0的错,而是传输查询间隔应该为0,因为是BULK传输.
tianrongcai
驱动牛犊
驱动牛犊
  • 注册日期2005-06-24
  • 最后登录2011-03-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望39点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2005-07-23 17:21
我已经把周立功的描述符放到正常的ARM程序中测试.ReadFile and WriteFile are normal.证明我对D12的操作掌握不够多.因此应该集中精力了解D12的操作.
tianrongcai
驱动牛犊
驱动牛犊
  • 注册日期2005-06-24
  • 最后登录2011-03-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望39点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2005-07-23 17:28
ReadFile时 D12的响应
D12Ep3IntProc() 8

D12Ep3IntProc() 8

本例子.没有上传数据给PC,Endpoit1为中断模式.D12产生Endpoit1 的IN中断.要求上传数据.
tianrongcai
驱动牛犊
驱动牛犊
  • 注册日期2005-06-24
  • 最后登录2011-03-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望39点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
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.
tianrongcai
驱动牛犊
驱动牛犊
  • 注册日期2005-06-24
  • 最后登录2011-03-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望39点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
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.
tianrongcai
驱动牛犊
驱动牛犊
  • 注册日期2005-06-24
  • 最后登录2011-03-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望39点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2005-07-25 14:19
本例子驱动程序是异步IO操作.用函数BulkUsb_BuildAsyncRequest()建立异步读写请求.因此CreateFile,ReadFile and WriteFile OVERLAPPED 不能为NULL.
tianrongcai
驱动牛犊
驱动牛犊
  • 注册日期2005-06-24
  • 最后登录2011-03-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望39点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2005-07-25 16:50
PDIUSBD12速度慢,设备句柄有时需要连续打开数百次才能成功!
tianrongcai
驱动牛犊
驱动牛犊
  • 注册日期2005-06-24
  • 最后登录2011-03-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望39点
  • 贡献值0点
  • 好评度17点
  • 原创分0分
  • 专家分0分
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;
}
上一页
游客

返回顶部