www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當前位置:首頁 > 單片機 > 單片機
[導讀]usb_prop.c文件可以說是一個蠻重要的文件,因為USB的許多處理函數(shù)都在這里定義。在無論是在USB的建立階段、數(shù)據(jù)階段還是狀態(tài)階段的一些處理都在這個文件,USB標準函數(shù)請求的函數(shù)也在這個文件里。usb_prop.c一開始就是

usb_prop.c文件可以說是一個蠻重要的文件,因為USB的許多處理函數(shù)都在這里定義。在無論是在USB的建立階段、數(shù)據(jù)階段還是狀態(tài)階段的一些處理都在這個文件,USB標準函數(shù)請求的函數(shù)也在這個文件里。

usb_prop.c一開始就是一連串的結(jié)構(gòu)體,如下:

DEVICE Device_Table =

{

EP_NUM, //被使用的端點數(shù)

1 //可以使用的端點數(shù)

};


DEVICE_PROP Device_Property =//注冊一些CustomHID函數(shù)

{

CustomHID_init,//CustomHID的初始化函數(shù)

CustomHID_Reset,//CustomHID的復位函數(shù)

CustomHID_Status_In,//CustomHID狀態(tài)輸入函數(shù)

CustomHID_Status_Out,//CustomHID狀態(tài)輸出函數(shù)

CustomHID_Data_Setup,//CustomHID的處理有數(shù)據(jù)階段的特殊類請求函數(shù)

CustomHID_NoData_Setup,//CustomHID的處理沒有數(shù)據(jù)階段特殊類請求函數(shù)

CustomHID_Get_Interface_Setting,//CustomHID獲取接口及備用接口設置(是否可用)

CustomHID_GetDeviceDescriptor,//CustomHID獲取設備描述符

CustomHID_GetConfigDescriptor,//CustomHID獲取配置描述符

CustomHID_GetStringDescriptor,//CustomHID獲取字符串描述符

0,//當前庫未使用

0x40 /*MAX PACKET SIZE*/ //最大的包長度為64字節(jié)

};


/*注冊USB標準請求的實現(xiàn)函數(shù)*/

USER_STANDARD_REQUESTS User_Standard_Requests =

{

CustomHID_GetConfiguration,//獲取配置請求

CustomHID_SetConfiguration,//設置配置請求

CustomHID_GetInterface,//獲取接口請求

CustomHID_SetInterface,//設置接口請求

CustomHID_GetStatus,//獲取狀態(tài)請求

CustomHID_ClearFeature,//清除屬性請求

CustomHID_SetEndPointFeature,//設置端點屬性請求

CustomHID_SetDeviceFeature,//設置設備屬性請求

CustomHID_SetDeviceAddress//設置設備地址請求

};


/*注冊設備描述符信息*/

ONE_DESCRIPTOR Device_Descriptor =

{

(uint8_t*)CustomHID_DeviceDescriptor, //注冊設備描述符數(shù)組

CUSTOMHID_SIZ_DEVICE_DESC //設備描述符的長度

};


/*注冊設備描述符信息*/

ONE_DESCRIPTOR Config_Descriptor =

{

(uint8_t*)CustomHID_ConfigDescriptor, //注冊配置描述符數(shù)組

CUSTOMHID_SIZ_CONFIG_DESC //配置描述符的長度

};


/*注冊報告描述符信息*/

ONE_DESCRIPTOR CustomHID_Report_Descriptor =

{

(uint8_t *)CustomHID_ReportDescriptor, //注冊報告描述符數(shù)組

CUSTOMHID_SIZ_REPORT_DESC //報告描述符的長度

};


/*注冊HID描述符信息*/

ONE_DESCRIPTOR CustomHID_Descriptor =

{

(uint8_t*)CustomHID_ConfigDescriptor + CUSTOMHID_OFF_HID_DESC, //注冊HID描述符數(shù)組

CUSTOMHID_SIZ_HID_DESC //HID數(shù)組的長度

};


/*注冊字符串描述符,包括語言ID、廠商、產(chǎn)品、序列號描述符*/

ONE_DESCRIPTOR String_Descriptor[4] =

{

{(uint8_t*)CustomHID_StringLangID, CUSTOMHID_SIZ_STRING_LANGID},//注冊語言字符串描述符數(shù)組

{(uint8_t*)CustomHID_StringVendor, CUSTOMHID_SIZ_STRING_VENDOR},//注冊廠商字符串描述符數(shù)組

{(uint8_t*)CustomHID_StringProduct, CUSTOMHID_SIZ_STRING_PRODUCT},//注冊產(chǎn)品字符串描述符數(shù)組

{(uint8_t*)CustomHID_StringSerial, CUSTOMHID_SIZ_STRING_SERIAL}//注冊序列號字符串描述符數(shù)組

};


應該看了很明白,這一系列的結(jié)構(gòu)體就是注冊一些處理函數(shù)。我們一個個分析。

先來說下 DEVICE Device_Table這個結(jié)構(gòu)體,DEVICE這個結(jié)構(gòu)體類型在usb_core.h中定義:

typedef struct _DEVICE

{

uint8_t Total_Endpoint; /*被使用的端點數(shù)*/

uint8_t Total_Configuration;/*還可以用的端點數(shù)*/

}

DEVICE;


這個結(jié)構(gòu)體類型很簡單,在結(jié)構(gòu)體中定義了已經(jīng)被使用的端點和沒有被使用的端點,把他們兩個放在一起方便查詢和管理。




接下去的說說DEVICE_PROP

Device_Property 這個類型的結(jié)構(gòu)體。這個結(jié)構(gòu)體的前10個元素都是函數(shù)指針類型的,把一些常用的函數(shù)放在這里,而函數(shù)定義都在該結(jié)構(gòu)體之后定義,有沒有覺得像是語文中的關鍵句,把整個文件的概要全部濃縮在這個結(jié)構(gòu)體中了,只要看這個結(jié)構(gòu)體就可以把整個文件做什么了解個七七八八了。這樣的結(jié)構(gòu)使用起來也非常方便,比如說我想要使用CustomHID_init函數(shù),只要寫Device_Property.CustomHID_init不就可以了。我們必須學會這種方法。

DEVICE_PROP這個結(jié)構(gòu)體類型還是在usb_core.h中定義:

typedef struct _DEVICE_PROP

{

void (*Init)(void); /*初始化設備*/

void (*Reset)(void); /*復位該設備*/


/*在控制傳輸中分三個過程:1.建立過程,2、可選的數(shù)據(jù)過程,3、狀態(tài)過程*/

/* Device dependent process after the status stage */

void (*Process_Status_IN)(void);/*狀態(tài)過程中,處理IN令牌包*/

void (*Process_Status_OUT)(void);/*狀態(tài)過程中,處理OUT令牌包*/


/*在建立階段的過程中,會有很多特殊類請求的數(shù)據(jù)階段stage */

/*所有在數(shù)據(jù)階段的特殊類請求都在Class_Data_Setup()函數(shù)中處理

Class_Data_Setup() 會響應去檢查所有的特殊類請求,同時根據(jù)請求填充ENDPOINT_INFO結(jié)構(gòu)信息

如果IN令牌包是期望的令牌包,則wLength和wOffset兩個域會分別被填充成要發(fā)送的總字節(jié)數(shù)和要開始傳輸?shù)奈恢?/p>

如果OUT令牌包是期盼的令牌包,則rLength和rOffser將會分別被填充成要接收的總字節(jié)數(shù)和要接收數(shù)據(jù)的緩沖區(qū)起始地址

如果請求有效,Class_Data_Setup返回SUCCESS,否則返回UNSUPPORT


注意:

因為GET_CONFIGURATION和GET_INTERFACE兩個請求跟個別的類聯(lián)系密切,所以他們會在該函數(shù)中檢查和處理*/

RESULT (*Class_Data_Setup)(uint8_t RequestNo);


/*在建立過程中,會有很多特殊類請求的無數(shù)據(jù)階段*/

/*所有的沒有數(shù)據(jù)階段的特殊請求都在Class_NoData_Setup這個函數(shù)中處理

Class_NoData_Setup()

會響應去檢查所有特殊類請求,并且執(zhí)行請求

注意:

因為SET_CONFIGURATION和SET_INTERFACE這兩個請求跟個別的類聯(lián)系密切,他們都會在該函數(shù)中被檢查和處理*/

RESULT (*Class_NoData_Setup)(uint8_t RequestNo);


/*Class_Get_Interface_Setting()

這個函數(shù)時在usb_core.c文件中被調(diào)用來測試應用程序是否支持被選中的接口和備用接口

這個函數(shù)時由用戶寫的。如果應用程序支持接口和備用接口,則必須返回"SUCCESS",否則,返回"UNSUPPORT"*/


RESULT (*Class_Get_Interface_Setting)(uint8_t Interface, uint8_t AlternateSetting);


uint8_t* (*GetDeviceDescriptor)(uint16_t Length);

uint8_t* (*GetConfigDescriptor)(uint16_t Length);

uint8_t* (*GetStringDescriptor)(uint16_t Length);


/* 這個字段不是用于當前庫版本。它是只保持兼容以前的版本*/

void* RxEP_buffer;

uint8_t MaxPacketSize;


}DEVICE_PROP;





接下去是USER_STANDARD_REQUESTS User_Standard_Requests這個結(jié)構(gòu)體,在這個結(jié)構(gòu)體中主要注冊了USB標準請求的實現(xiàn)函數(shù),當然這些函數(shù)也實在該結(jié)構(gòu)體后面定義的。跟上面的DEVICE_PROP

Device_Property結(jié)構(gòu)體類似,就不多講了。

USER_STANDARD_REQUESTS 結(jié)構(gòu)體也是在usb_core.h中定義:

typedef struct _USER_STANDARD_REQUESTS

{

void (*User_GetConfiguration)(void); /*獲取配置*/

void (*User_SetConfiguration)(void); /*設置配置*/

void (*User_GetInterface)(void); /*獲取接口*/

void (*User_SetInterface)(void); /*設置接口*/

void (*User_GetStatus)(void); /*獲取狀態(tài)*/

void (*User_ClearFeature)(void); /*清除特性*/

void (*User_SetEndPointFeature)(void); /*設置端點特性*/

void (*User_SetDeviceFeature)(void); /*設置設備特性*/

void (*User_SetDeviceAddress)(void); /*設置設備地址*/

}

USER_STANDARD_REQUESTS;



像ONE_DESCRIPTOR Device_Descriptor、ONE_DESCRIPTOR Config_Descriptor、ONE_DESCRIPTOR CustomHID_Report_Descriptor、ONE_DESCRIPTOR CustomHID_Descriptor、ONE_DESCRIPTOR String_Descriptor[4]這些結(jié)構(gòu)體都不仔細講了。貼出各個結(jié)構(gòu)體的定義,依舊在usb_core.h中:

typedef struct OneDescriptor

{

uint8_t *Descriptor;

uint16_t Descriptor_Size;

}

ONE_DESCRIPTOR, *PONE_DESCRIPTOR;



接下去上面各個結(jié)構(gòu)體注冊的函數(shù)貼出來:

/*******************************************************************************

* Function Name : CustomHID_init.

* Description : CustomHID Mouse init routine.初始化

* Input : None.

* Output : None.

* Return : None.

*******************************************************************************/

void CustomHID_init(void)

{


/* Update the serial number string descriptor with the data from the unique

ID*/

Get_SerialNum();//獲取序列號


pInformation->Current_Configuration = 0;

/* Connect the device */

PowerOn();//上電


/* Perform basic device initialization operations */

USB_SIL_Init();//執(zhí)行基本的初始化操作,比如說設備IP和端點0的初始化


bDeviceState =

本站聲明: 本文章由作者或相關機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務中斷的風險,如企業(yè)系統(tǒng)復雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務連續(xù)性,提升韌性,成...

關鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關鍵字: 華為 12nm EDA 半導體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務引領增長 以科技創(chuàng)新為引領,提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術學會聯(lián)合牽頭組建的NVI技術創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術創(chuàng)新聯(lián)...

關鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關鍵字: BSP 信息技術
關閉
關閉