wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
40楼#
发布于:2005-08-05 14:39
喔,你是这么考虑的啊:)恩,有思路,我忘了你在产品上开发了,我还想让你在注册表DRIVERS\BUILTIN里面来加在你的驱动,如果在产品上其实也可以,你可以用函数往BUILTIN里面写,然后重起机器,不过你自己来ACTIVE这个办法好:)!不用重起。

对了,其实流接口不流接口只是一个组件(这里是驱动)和其他组件交互的一个方式而已,一个模块可能有很多和外界的交互接口,你这个驱动就是典型的多接口类型驱动。除了流接口还有其他很多接口,有的向上,有的向下,有的加载时候用,有的工作(USB设备插入)时侯用。

应用来调用也可以阿,就和你在ATTACHDEVICE的时候一样啊,返回的句柄你的应用可以直接用啊。
根据地的兄弟们,团结就是力量
fenstein
驱动牛犊
驱动牛犊
  • 注册日期2005-05-25
  • 最后登录2005-10-20
  • 粉丝0
  • 关注0
  • 积分52分
  • 威望7点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
41楼#
发布于:2005-08-09 11:27
二位大哥,我也在做一个usb流接口驱动,也是用pb带的打印机驱动在改,请问一下,
#define USB_PRN_SIG 0x50425355 // "USBP" tag

这个0x50425355是从哪里得到的.我是第一次做驱动,请各位大侠帮忙.
fenstein
驱动牛犊
驱动牛犊
  • 注册日期2005-05-25
  • 最后登录2005-10-20
  • 粉丝0
  • 关注0
  • 积分52分
  • 威望7点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
42楼#
发布于:2005-08-09 11:43
还有,wxl_50685330大哥说得要加usbd.lib,可我找不到usbd.lib在哪里呀,帮帮忙啊!!
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
43楼#
发布于:2005-08-09 13:40
那个sig你自己去个名字就行了三:)

usbd.lib在public下的你自己建的project里面的sysgen\\oak\lib里面啊,这个库时生成你的平台时系统重新生成的,不在common\\oak\\lib里面哈
根据地的兄弟们,团结就是力量
fenstein
驱动牛犊
驱动牛犊
  • 注册日期2005-05-25
  • 最后登录2005-10-20
  • 粉丝0
  • 关注0
  • 积分52分
  • 威望7点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
44楼#
发布于:2005-08-09 14:09
感谢wxl_50685330大哥神速回复!!!!!!!!!!!

我也在做一个usb流驱动,是用来 和下位机通讯的.
我受hepower大哥启发,用一样思路,用打印机驱动来改,只是我们下位机的usb固件还没有做好,我暂时用usb鼠标来模拟下位机,做驱动.
我在改写中有几个问题:
1.usb设备一插上应该先是USBInstallDriver被调用,可是我在插上设备后只有USBDeviceAttach被调用(我在三个usb接口函数中分别写了MessageBox来确定函数是否被调用)而弹出对话框.所以[HKEY_LOCAL_MACHINE\\Driver\\USB\\ClientDrivers]下没有被注册.
2.我在\LoadClients下面是这样写的  \LoadClients\1133_49213\Default\Default\Stream_USB
1133_49213是鼠标的pid&vid,将来会改为下位机usb口的pid&vid,那么鼠标的协议码是3,我是不是也应该写为\LoadClients\1133_49213\Default\3\Stream_USB才行呢,然后,到最后用下位机的时候改为\LoadClients\1133_49213\Default\(下位机协议类型)\Stream_USB呢?
3.我搜索了一下,你说的地方没有usbd.lib,我的整个硬盘里都没有,呵呵.我还是才用了hepower大哥的方法,加载usbd.dll.

小弟我刚刚开始做CE驱动,比较迷茫,请几位大哥指点,谢谢!!!!!!!!!
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
45楼#
发布于:2005-08-09 14:55
1.你的注册表配置导致了USBInstallDriver不会执行,只有在下层读出的pid&vid等匹配不到时系统才会谈出对话框叫你选择你想加载的client驱动,你这里配的注册表使usbd.dll能识别这个设备,所以就直接调用deviceattach了

2.是的,不过有些信息你不清楚可以不用写那么详细,第一次系统会询问你加载你自己的client driver,然后在installdriver里面你可以读设备信息,然后建立注册表,下次就可以自动了。

3.没有就算了,你就这样做吧,如果需要,你可以手动去编译那个库,good luck:)
根据地的兄弟们,团结就是力量
hepower
驱动牛犊
驱动牛犊
  • 注册日期2005-01-18
  • 最后登录2009-06-24
  • 粉丝0
  • 关注0
  • 积分198分
  • 威望25点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
46楼#
发布于:2005-08-09 15:06
#define USB_PRN_SIG 0x50425355 // "USBP" tag
这个0x50425355是从哪里得到的.我是第一次做驱动,请各位大侠帮忙.

这个tag是自己定义的,用来验证是不是自己的设备

1。你的注册表中的LoadClients下面已经有设备信息了,证明系统已经调用过你的dll的USBInstallDriver函数了,USBInstallDriver是设备第一次插上会调用的函数(系统会弹出对话框,让你输入驱动名称,因为LoadClients下没有匹配到你设备的信息),USBInstallDriver会在LoadClients下生成一些设备信息,(你自己写的)后面再插设备后,系统直接调用驱动的USBDeviceAttach函数来初始化了,如果你想让系统调用你驱动的USBInstallDriver函数,可以用Remote Registor Editor把LoadClients下面关于你设备的登记信息手动删除,再插设备。

3。我也没找到,不过windows目录下面有usbd.dll可以加载
心若在,梦就在
fenstein
驱动牛犊
驱动牛犊
  • 注册日期2005-05-25
  • 最后登录2005-10-20
  • 粉丝0
  • 关注0
  • 积分52分
  • 威望7点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
47楼#
发布于:2005-08-09 16:10
哦,明白了,谢谢二位大哥!!!!!!!!!!!!!!!!!!!!!!
我试试去
fenstein
驱动牛犊
驱动牛犊
  • 注册日期2005-05-25
  • 最后登录2005-10-20
  • 粉丝0
  • 关注0
  • 积分52分
  • 威望7点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
48楼#
发布于:2005-08-09 17:33
我按照hepower大哥说得做了,USBInstallDriver正常被调用,但是USBDeviceAttach被调用时第二个参数LPCUSB_INTERFACE UsbInterface和最后一个参数DWORD Unused为NULL导致USBDeviceAttach函数返回false.
BOOL
USBDeviceAttach(
   USB_HANDLE       hDevice,
   LPCUSB_FUNCS     UsbFuncs,      
   LPCUSB_INTERFACE UsbInterface,
   LPCWSTR          UniqueDriverId,
   LPBOOL           AcceptControl,
   LPCUSB_DRIVER_SETTINGS UsbDriverSettings,
   DWORD Unused
)

而USBDeviceAttach执行完后又会弹出对话框提示输入驱动.是不是我的设备信息没有写对造成的.

另一个问题:
wxl_50685330说得,可以在USBInstallDriver去获取设备信息,怎样获取呢,用什么函数?或者有其他的什么工具软件可以获取吗?
fenstein
驱动牛犊
驱动牛犊
  • 注册日期2005-05-25
  • 最后登录2005-10-20
  • 粉丝0
  • 关注0
  • 积分52分
  • 威望7点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
49楼#
发布于:2005-08-10 11:07
我的usb注册信息没有写对,改后UsbInterface参数有效了,Unused仍然为NULL.

插入设备后系统提示输入驱动名,输入后USBInstallDriver执行了,注册表中也更新了,可是,随后USBDeviceAttach被调用后,系统又提示输入驱动.不知道为什么.请帮我看看.
我用usbview抓取了usb信息如下:
Device Descriptor:
bcdUSB:             0x0200
bDeviceClass:         0x00
bDeviceSubClass:      0x00
bDeviceProtocol:      0x00
bMaxPacketSize0:      0x08 (8)
idVendor:           0x046D (Logitech Inc.)
idProduct:          0xC03D
bcdDevice:          0x2000
iManufacturer:        0x01
iProduct:             0x02
iSerialNumber:        0x00
bNumConfigurations:   0x01

ConnectionStatus: DeviceConnected
Current Config Value: 0x01
Device Bus Speed:      Low
Device Address:       0x02
Open Pipes:              1

Endpoint Descriptor:
bEndpointAddress:     0x81
Transfer Type:   Interrupt
wMaxPacketSize:     0x0004 (4)
bInterval:            0x0A


BOOL
USBInstallDriver(
   LPCWSTR szDriverLibFile
   )
{
       HKEY  hKey = NULL;
    BOOL  bRc;

       HINSTANCE hInst = LoadLibrary(L"USBD.DLL");

       if( !hInst )
       {
              return false;
       }
       LPREGISTER_CLIENT_SETTINGS pRegisterSettings =
                     (LPREGISTER_CLIENT_SETTINGS) GetProcAddress(hInst,
                     gcszRegisterClientSettings);

       LPREGISTER_CLIENT_DRIVER_ID pRegisterId = (LPREGISTER_CLIENT_DRIVER_ID)
                     GetProcAddress(hInst, gcszRegisterClientDriverId);

    const WCHAR wsUsbDeviceID[] = CLASS_NAME_SZ;
    WCHAR wsSubClassRegKey[sizeof(CLIENT_REGKEY_SZ)+16] = CLIENT_REGKEY_SZ;

    USB_DRIVER_SETTINGS usbDriverSettings ;

usbDriverSettings.dwCount = sizeof(usbDriverSettings);
usbDriverSettings.dwVendorId = USB_NO_INFO;
usbDriverSettings.dwProductId = USB_NO_INFO;
usbDriverSettings.dwReleaseNumber = USB_NO_INFO;

usbDriverSettings.dwDeviceClass = USB_NO_INFO;
usbDriverSettings.dwDeviceSubClass = USB_NO_INFO;
usbDriverSettings.dwDeviceProtocol = USB_NO_INFO;

usbDriverSettings.dwInterfaceClass = 0x03; // HID
usbDriverSettings.dwInterfaceSubClass = 0x01; // boot device
usbDriverSettings.dwInterfaceProtocol = 0x02; // mouse

   DEBUGMSG( ZONE_USB_INIT, (TEXT(">USBInstallDriver(%s)\n"), szDriverLibFile ));
    
    //
   // register with USBD
   //
   bRc = ( *pRegisterId )( wsUsbDeviceID );
   if ( !bRc ) {
      DEBUGMSG( ZONE_ERR, (TEXT("RegisterClientDriverID error:%d\n"), GetLastError()));
      return FALSE;
   }
        
   bRc = ( * pRegisterSettings)( szDriverLibFile,
                                 wsUsbDeviceID,
                                 NULL,
                                 &usbDriverSettings );
   if ( !bRc ) {
      DEBUGMSG( ZONE_ERR, (TEXT("RegisterClientSettings error:%d\n"), GetLastError()));
      return FALSE;
   }

    FreeLibrary(hInst);  
    DEBUGMSG( ZONE_USB_INIT, (TEXT("<USBInstallDriver:%d\n"), bRc ));

   return bRc;
}



BOOL
USBDeviceAttach(
   USB_HANDLE       hDevice,
   LPCUSB_FUNCS     UsbFuncs,      
   LPCUSB_INTERFACE UsbInterface,
   LPCWSTR          UniqueDriverId,
   LPBOOL           AcceptControl,
   LPCUSB_DRIVER_SETTINGS UsbDriverSettings,
   DWORD Unused
    )
{
   BOOL bRc = TRUE;
   return bRc;
}
hepower
驱动牛犊
驱动牛犊
  • 注册日期2005-01-18
  • 最后登录2009-06-24
  • 粉丝0
  • 关注0
  • 积分198分
  • 威望25点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
50楼#
发布于:2005-08-10 11:29
那个Unused应该就是NULL吧,应该是不用的,
你的USBDeviceAttach函数的AcceptControl参数是作为返回值的,这个值表示驱动能否控制该设备,如果是FALSE,驱动就会加载不成功,你在USBDeviceAttach中把它改成TRUE试一下吧
心若在,梦就在
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
51楼#
发布于:2005-08-10 13:24
我说的读信息是在下层传上来的参数里面,好像是USBDEVICEATTACH的第三个参数,记不清了,你看看COMMON\\OAK\\DRIVERS\\USB\\CLASS\STORAGE\\CLASS里面的USBMSC.C,下层的设备基本信息已经被读出来了,你只需要从下层传来的数据块中读就可以了(基本应该是,有点儿记不清了:))。
根据地的兄弟们,团结就是力量
fenstein
驱动牛犊
驱动牛犊
  • 注册日期2005-05-25
  • 最后登录2005-10-20
  • 粉丝0
  • 关注0
  • 积分52分
  • 威望7点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
52楼#
发布于:2005-08-11 11:45
今天下位机的usb固件做好了,但是调试时又出现了问题.
usbDeviceAttach被调用时又出现第三个参数Usbinterface为NULL,也就是wxl_50685330大哥说得含有usb端口信息的参数.
我的usbDriverSettings结构时这样写的:
    USB_DRIVER_SETTINGS usbDriverSettings ;

usbDriverSettings.dwCount = sizeof(usbDriverSettings);
usbDriverSettings.dwVendorId = 1137;
usbDriverSettings.dwProductId = 1638;
usbDriverSettings.dwReleaseNumber = USB_NO_INFO;

usbDriverSettings.dwDeviceClass = USB_NO_INFO;
usbDriverSettings.dwDeviceSubClass = USB_NO_INFO;
usbDriverSettings.dwDeviceProtocol = USB_NO_INFO;

usbDriverSettings.dwInterfaceClass = USB_NO_INFO; usbDriverSettings.dwInterfaceSubClass = USB_NO_INFO; usbDriverSettings.dwInterfaceProtocol = USB_NO_INFO;

设备usb信息如下:
Device Descriptor:
bcdUSB:             0x0100
bDeviceClass:         0xDC
bDeviceSubClass:      0x00
bDeviceProtocol:      0x00
bMaxPacketSize0:      0x10 (16)
idVendor:           0x0471
idProduct:          0x0666
bcdDevice:          0x0100
iManufacturer:        0x00
iProduct:             0x00
iSerialNumber:        0x00
bNumConfigurations:   0x19

ConnectionStatus: DeviceConnected
Current Config Value: 0x00
Device Bus Speed:     Full
Device Address:       0x02
Open Pipes:              0

写上VID&PID就应该能认到设备呀,可是.................
我不知道时什么原因,请帮忙看看.



BOOL
USBInstallDriver(
   LPCWSTR szDriverLibFile
   )
{
       HKEY  hKey = NULL;
    BOOL  bRc;

       HINSTANCE hInst = LoadLibrary(L"USBD.DLL");

       if( !hInst )
       {
              return false;
       }
       LPREGISTER_CLIENT_SETTINGS pRegisterSettings =
                     (LPREGISTER_CLIENT_SETTINGS) GetProcAddress(hInst,
                     gcszRegisterClientSettings);

       LPREGISTER_CLIENT_DRIVER_ID pRegisterId = (LPREGISTER_CLIENT_DRIVER_ID)
                     GetProcAddress(hInst, gcszRegisterClientDriverId);

    const WCHAR wsUsbDeviceID[] = CLASS_NAME_SZ;
    WCHAR wsSubClassRegKey[sizeof(CLIENT_REGKEY_SZ)+16] = CLIENT_REGKEY_SZ;

    USB_DRIVER_SETTINGS usbDriverSettings ;

usbDriverSettings.dwCount = sizeof(usbDriverSettings);
usbDriverSettings.dwVendorId = 1137;
usbDriverSettings.dwProductId = 1638;
usbDriverSettings.dwReleaseNumber = USB_NO_INFO;

usbDriverSettings.dwDeviceClass = USB_NO_INFO;
usbDriverSettings.dwDeviceSubClass = USB_NO_INFO;
usbDriverSettings.dwDeviceProtocol = USB_NO_INFO;

usbDriverSettings.dwInterfaceClass = USB_NO_INFO; usbDriverSettings.dwInterfaceSubClass = USB_NO_INFO; usbDriverSettings.dwInterfaceProtocol = USB_NO_INFO;

    DWORD dwPortStatusTimeout = GET_PORT_STATUS_TIMEOUT;
    DWORD dwDeviceIdTimeout   = GET_DEVICE_ID_TIMEOUT;
    DWORD dwSoftResetTimeout  = SOFT_RESET_TIMEOUT;

    DWORD dwReadTimeoutMultiplier  = READ_TIMEOUT_MULTIPLIER;
    DWORD dwReadTimeoutConstant    = READ_TIMEOUT_CONSTANT;
    DWORD dwWriteTimeoutMultiplier = WRITE_TIMEOUT_MULTIPLIER;
    DWORD dwWriteTimeoutConstant   = WRITE_TIMEOUT_CONSTANT;

    REG_VALUE_DESCR usbPrnKeyValues[] = {
        (TEXT("Dll")),               REG_SZ,    0, (PBYTE)(DRIVER_NAME),
        (TEXT("Prefix")),            REG_SZ,    0, (PBYTE)(DEVICE_PREFIX),
        GET_PORT_STATUS_TIMEOUT_SZ,  REG_DWORD, 0, (PUCHAR)(&dwPortStatusTimeout),
        GET_DEVICE_ID_TIMEOUT_SZ,    REG_DWORD, 0, (PUCHAR)(&dwDeviceIdTimeout),
        SOFT_RESET_TIMEOUT_SZ,       REG_DWORD, 0, (PUCHAR)(&dwSoftResetTimeout),
        READ_TIMEOUT_MULTIPLIER_SZ,  REG_DWORD, 0, (PUCHAR)(&dwReadTimeoutMultiplier),
        READ_TIMEOUT_CONSTANT_SZ,    REG_DWORD, 0, (PUCHAR)(&dwReadTimeoutConstant),
        WRITE_TIMEOUT_MULTIPLIER_SZ, REG_DWORD, 0, (PUCHAR)(&dwWriteTimeoutMultiplier),
        WRITE_TIMEOUT_CONSTANT_SZ,   REG_DWORD, 0, (PUCHAR)(&dwWriteTimeoutConstant),
        NULL, 0, 0, NULL
    };

   DEBUGMSG( ZONE_USB_INIT, (TEXT(">USBInstallDriver(%s)\n"), szDriverLibFile ));
    
   // register with USBD
   bRc = ( *pRegisterId )( wsUsbDeviceID );
   if ( !bRc ) {
      DEBUGMSG( ZONE_ERR, (TEXT("RegisterClientDriverID error:%d\n"), GetLastError()));
      return FALSE;
   }
        
   bRc = ( * pRegisterSettings)( szDriverLibFile,
                                 wsUsbDeviceID,
                                 NULL,
                                 &usbDriverSettings );
   if ( !bRc ) {
      DEBUGMSG( ZONE_ERR, (TEXT("RegisterClientSettings error:%d\n"), GetLastError()));
      return FALSE;
   }

       FreeLibrary(hInst);  
    // Add our default values to the reg
    if ( !GetSetKeyValues( wsSubClassRegKey,
                           &usbPrnKeyValues[0],
                           SET,
                           TRUE ) ) {
        DEBUGMSG( ZONE_ERR, (TEXT("GetSetKeyValues failed!\n")));
    }
    DEBUGMSG( ZONE_USB_INIT, (TEXT("<USBInstallDriver:%d\n"), bRc ));

       MessageBox(NULL, _T("USBInstallDriver"), _T("OK"), MB_OK);
   return bRc;
}
winky
驱动牛犊
驱动牛犊
  • 注册日期2007-01-08
  • 最后登录2008-02-27
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
53楼#
发布于:2007-01-12 12:58
自己做USB驱动呀??唉,我看都看不懂,别说写了。惭愧。。。
lovealan
驱动牛犊
驱动牛犊
  • 注册日期2007-01-19
  • 最后登录2013-12-19
  • 粉丝0
  • 关注0
  • 积分133分
  • 威望26点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
54楼#
发布于:2007-02-27 21:11
fenstein,你的问题解决了没有? 我碰到的问题和你一样,指定了VID和PID,UsbDeviceAttach被调用时第三个参数usbInterface为NULL,所以直接返回了,请问各位高手这种情况该如何解决,是不是设备的注册信息还设置不对? 请指教。
lovealan
驱动牛犊
驱动牛犊
  • 注册日期2007-01-19
  • 最后登录2013-12-19
  • 粉丝0
  • 关注0
  • 积分133分
  • 威望26点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
55楼#
发布于:2007-03-01 16:19
我在用GetSetKeyValues函数设置注册表键值时,老是出错! 不知道为什么??
代码如下:
WCHAR wsSubClassRegKey[sizeof(CLIENT_REGKEY_SZ)+16] = CLIENT_REGKEY_SZ;

REG_VALUE_DESCR LmeusbKeyValues[] = {
        TEXT("Dll"),    REG_SZ,    0, (PBYTE)(DRIVER_NAME),
        NULL, 0, 0, NULL
};

// Set our default values to the register
if (!GetSetKeyValues(wsSubClassRegKey , LmeusbKeyValues, FALSE, TRUE)) {
      MessageBox(NULL,_T("Wrong to Set Registry Values!!"), _T("OK"), MB_OK);
      return FALSE;
}

求教各位兄弟,这种情况该如何解决??  谢谢!
微笑BBS
驱动牛犊
驱动牛犊
  • 注册日期2007-07-02
  • 最后登录2007-07-27
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望3点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
56楼#
发布于:2007-07-27 10:41
请问你的下位机程序能贴出来看看吗?



[quote]引用第52楼fenstein于2005-08-11 11:45发表的  :
今天下位机的usb固件做好了,但是调试时又出现了问题.
usbDeviceAttach被调用时又出现第三个参数Usbinterface为NULL,也就是wxl_50685330大哥说得含有usb端口信息的参数.
我的usbDriverSettings结构时这样写的:
    USB_DRIVER_SETTINGS usbDriverSettings ;
happy-hg
驱动牛犊
驱动牛犊
  • 注册日期2004-07-20
  • 最后登录2011-06-18
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望27点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
57楼#
发布于:2009-01-06 15:58
Mark
landherd
驱动牛犊
驱动牛犊
  • 注册日期2006-09-19
  • 最后登录2009-06-18
  • 粉丝1
  • 关注0
  • 积分65分
  • 威望47点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
58楼#
发布于:2009-06-12 10:34
回 24楼(wxl_50685330) 的帖子
有没有人做TD到modem到?
上一页 下一页
游客

返回顶部