[問題] 請教libUSB操作

看板LinuxDev作者 (ranger)時間12年前 (2013/04/25 18:38), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
請教各位先進, 目前在摸索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 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 59.120.179.30 ※ 編輯: newranger 來自: 59.120.179.30 (04/25 18:42)
文章代碼(AID): #1HUGU8xe (LinuxDev)
文章代碼(AID): #1HUGU8xe (LinuxDev)