[问题] 请教libUSB操作

楼主: newranger (ranger)   2013-04-25 18:37:58
请教各位先进, 目前在摸索USB, 我的计画本来是这样想:
libusb可以从usbcore调上来的API, 好让我可以在使用者模式下写些小程式实验
另外我本身有一块RS232转USB,
首先我使用minicom对RS232随便打一些字串, 然后使用usbmon观察
把观察到的结果纪录后, 用自己带有libusb的小程式去传一些字
usbmon观察到的结果如下<输入"123">
f3106300 2770600118 S Bo:2:005:2 -115 1 = 31
f3106300 2770751467 C Bo:2:005:2 0 1 >
f3106480 2770761014 C Bi:2:005:3 0 1 = 31
f3106480 2770761030 S Bi:2:005:3 -115 64 <
f3106300 2771335026 S Bo:2:005:2 -115 1 = 32
f3106300 2771336300 C Bo:2:005:2 0 1 >
f3106480 2771340617 C Bi:2:005:3 0 1 = 32
f3106480 2771340637 S Bi:2:005:3 -115 64 <
f3106300 2771848105 S Bo:2:005:2 -115 1 = 33
f3106300 2771849336 C Bo:2:005:2 0 1 >
f3106480 2771850486 C Bi:2:005:3 0 1 = 33
f3106480 2771850495 S Bi:2:005:3 -115 64 <
f3106300 2775748383 S Bo:2:005:2 -115 1 = 0d
f3106300 2776196661 C Bo:2:005:2 0 1 >
f3106480 2776201096 C Bi:2:005:3 0 1 = 0d
f3106480 2776201137 S Bi:2:005:3 -115 64 <
f3106480 2776201846 C Bi:2:005:3 0 1 = 0a
f3106480 2776201929 S Bi:2:005:3 -115 64 <
f3106480 2776223409 C Bi:2:005:3 0 1 = 2d
f3106480 2776223451 S Bi:2:005:3 -115 64 <
f3106480 2776234018 C Bi:2:005:3 0 24 = 73683a20 3132333a 20636f6d 6d616e64
206e6f74 20666f75
f3106480 2776234027 S Bi:2:005:3 -115 64 <
f3106480 2776234926 C Bi:2:005:3 0 4 = 6e640d0a
f3106480 2776234940 S Bi:2:005:3 -115 64 <
f3106480 2776240407 C Bi:2:005:3 0 1 = 72
f3106480 2776240481 S Bi:2:005:3 -115 64 <
f3106480 2776242658 C Bi:2:005:3 0 14 = 6f6f7440 286e6f6e 6529207e 2420
f3106480 2776242724 S Bi:2:005:3 -115 64 <
想说看到的是其实也没什么机关, 单纯只是区块传送, 所以我照本宣科去做:
先初始化libusb
libusb_init(NULL);
.......
然后在查看BUS中装置
libusb_get_device_list(NULL, &devs);
.......
在众装置中找到我的RS232转USB
libusb_get_device_descriptor(dev, &desc);
if(desc.idVendor==RS232_ID)
libusb_open(iPod_device, &iPod_device_handle);
对他询问DEVICE DESCRIPT 与 CONFIGRATION DESCRIPT资料
libusb_control_transfer
(iPod_device_handle,
LIBUSB_ENDPOINT_IN|LIBUSB_RECIPIENT_DEVICE,
LIBUSB_REQUEST_GET_DESCRIPTOR,
LIBUSB_DT_DEVICE<<8|0,
0,
data,
500,
1000
);
libusb_control_transfer
(iPod_device_handle,
LIBUSB_ENDPOINT_IN|LIBUSB_RECIPIENT_DEVICE,
LIBUSB_REQUEST_GET_DESCRIPTOR,
LIBUSB_DT_CONFIG<<8|(LockConfig-1),
0,
data,
500,
1000
);
记住目前configraiton与interface为何, 并让目前interface从OS手上释放掉
libusb_get_configuration(iPod_device_handle, &LockConfig);
.......
for()
{
ack=libusb_kernel_driver_active(iPod_device_handle,i);
if(ack==1)
func_status=libusb_detach_kernel_driver(iPod_device_handle, i);
}
重新宣告目前configration与interface对象
libusb_set_configuration(iPod_device_handle,i);
libusb_claim_interface(iPod_device_handle,i);
然后使用区块传送一段ASCII字串<"cd /home">
libusb_bulk_transfer
(iPod_device_handle,
2,
data,
9,
&actual_length
,1000
);
usbmon观察我的动作如下
f31de080 3432273883 S Ci:2:005:0 s 80 06 0100 0000 01f4 500 <
f31de080 3432294194 C Ci:2:005:0 0 18 = 12011001 00000040 7b060323 00040102
0001
f31de800 3432294641 S Ci:2:005:0 s 80 06 0200 0000 01f4 500 <
f31de800 3432298158 C Ci:2:005:0 0 39 = 09022700 010100a0 32090400 0003ff00
00000705 81030a00 01070502 02400000
f31de800 3432298583 S Co:2:005:0 s 00 09 0001 0000 0000 0
f31de800 3432405110 C Co:2:005:0 0 0
f31de800 3432405401 S Bo:2:005:2 -115 9 = 6364202f 686f6d0d
f31de800 3432405837 C Bo:2:005:2 0 9 >
结果我看UART的另一端, 根本没有把字串丢过去,
请问我中间有环节还是观念有错误吗? 希望有版友能指点一下
谢谢
我担心排版混乱讲的很撩乱, 程式完整版如下URL
http://ideone.com/EacJyJ

Links booklink

Contact Us: admin [ a t ] ucptt.com