libusb定義了5中傳輸型別,分別是:
控制傳輸(libusb_transfer_type_control=0)
同步傳輸(libusb_transfer_type_isochronous = 1)
批量傳輸(libusb_transfer_type_bulk = 2)
中斷傳輸(libusb_transfer_type_interrupt = 3)
批量流傳輸(libusb_transfer_type_bulk_stream = 4)
說明參考:
每個端點(endpoint)支援的io型別和傳輸型別不一樣,根據實際情況選取傳輸型別。
重點說明使用到的幾個方法,詳細的可以參考官方文件(英文)
官方文件:
//初始化,所有的libusb操作都要在此方法之後,返回0表示成功,-1異常
int libusb_call libusb_init
(libusb_context *
*ctx)
;//解除安裝libusb,之後的libusb操作都會異常
void libusb_call libusb_exit
(libusb_context *ctx)
;
所有的libusb操作都要包括在這兩個方法之間,一般情況下ctx引數為null。
說明一下libusb_context
結構體,是由libusb_init建立並由libusb_exit銷毀,用於隔離使用者操作,類似於會話。當乙個被銷毀時不至於影響到另外乙個的操作。只有單個使用者時可以為null,使用預設的context。
/**
* 根據裝置的vid和pid開啟裝置,pid和vid可以通過裝置管理器檢視
* * @param ctx libusb_context
* @param vendor_id 裝置vid
* @param product_id 裝置pid
* * @retrun 返回裝置控制代碼,失敗返回null。後續的裝置讀寫,獲取資訊都依賴這個控制代碼
*/libusb_device_handle * libusb_call libusb_open_device_with_vid_pid
( libusb_context *ctx, uint16_t vendor_id, uint16_t product_id)
;//關閉裝置,釋放裝置控制代碼
void libusb_call libusb_close
(libusb_device_handle *dev_handle)
;
/**
* 獲取裝置資訊
* **/int libusb_call libusb_get_device_descriptor
(libusb_device *dev,
struct libusb_device_descriptor *desc)
;/**
* 獲取裝置配置資訊
* @param dev 裝置控制代碼
* @param config_index 乙個裝置可能有多個配置資訊,一般設定為0
* @param config 【輸出引數】 裝置配置資訊指標的引用
* * @return 成功返回0
*/int libusb_call libusb_get_config_descriptor
(libusb_device *dev,
uint8_t config_index,
struct libusb_config_descriptor *
*config)
;//釋放裝置配置資訊
void libusb_call libusb_free_config_descriptor
(struct libusb_config_descriptor *config)
;
結構體說明,詳細看官網咖
annotated.html
libusb_endpoint_descriptor
端點資訊:描述傳輸型別,讀/寫埠,傳輸包大小等
libusb_inte***ce_descriptor
介面資訊:存放端點列表,
libusb_config_descriptor
配置資訊:存放介面列表
libusb_device_descriptor
裝置資訊:描述配置數,vid,pid,序列號之類
/**
* 宣告介面,宣告介面之後才能在基於該介面的端點(endpoint)讀寫資料
* @param dev_handle 裝置控制代碼
* @param inte***ce_number 介面號
* @return 成功返回0
*/int libusb_call libusb_claim_inte***ce
(libusb_device_handle *dev_handle,
int inte***ce_number)
;/**
* 釋放介面
* @param dev_handle 裝置控制代碼
* @param inte***ce_number 介面號
* @return 成功返回0
*/int libusb_call libusb_release_inte***ce
(libusb_device_handle *dev_handle,
int inte***ce_number)
;
這裡以同步傳輸的中斷傳輸為例
/**
* 同步傳輸,中斷傳輸。讀/寫依賴埠型別
* 在超時時間內一旦完成讀/寫乙個資料報就返回,超出超時時間返回超時
* * @param dev_handle 裝置控制代碼
* @param endpoint 讀寫的埠,埠所在的介面需要宣告,
* 埠的讀寫型別需要是interrupt
* @param data 寫資料時的資料輸入陣列,讀資料時的輸出陣列
* @param length 寫資料時的資料長度,讀資料時最大報文長度
* @param transferred 【輸出值】實際傳輸的資料大小
* @param timeout 超時時間(毫秒ms)
* @return 成功返回0,其他異常**
*/int libusb_interrupt_transfer (
struct libusb_device_handle * dev_handle,
unsigned
char endpoint,
unsigned
char
* data,
int length,
int* transferred,
unsigned
int timeout
)
快速排序演算法實現(遞迴實現 棧實現)
基本思想 選擇乙個基準元素,比如選擇最後乙個元素,通過一趟掃瞄,將待排序列分成兩部分,一部分比基準元素小,一部分大於等於基準元素,此時基準元素在其排好序後的正確位置,又稱為軸位置,此位置的元素確定後不再參與排序,然後再用同樣的方法遞迴地排序劃分的兩部分。分析 快速排序是不穩定的排序。快速排序的時間複...
介面實現與配置實現
在實現系統功能的時候,通常會首先定義好功能的介面,在系統功能不斷被實現的過程中,慢慢的發現有些介面的實現很類似,這個時候通常會開始做一次抽象,形 成乙個共同的部分,慢慢的系統形成了乙個抽象的層次,而為了通用,通常是通過定義介面,形成乙個抽象類,抽象類中暴露出一些抽象方法供外部擴充套件實 現,逐步的積...
js分頁實現,前端實現。
主要是借鑑了網上乙個例子,自己重新加了樣式,新增了跳轉,修改了一些小地方,用於和大家一起分享,前端分頁的技巧,的資料是我已經寫好了,其實大家也可以前端渲染 然後再分頁,都是可以的。其實分頁最關鍵是這兩句 var startrow currentpage 1 pagesize 1 currentpag...