一、需求
rv1108的 usb otg做usb從裝置的時候只有1,3,5,7端點可以作為輸入端點。因基於rv1108的 專案特殊需求,需要將對usb device的端點2的in操作對映到端點3的in操作。
經過分析linux kernel 的 usb gadat 驅動框架,dwc_otg_driver, usb gadget driver,uvc_gadte_drvier(composite driver),alstralive應用的 transmission模組原始碼,評估出無法滿足將對usb device的端點2的in操作對映到端點3的in操作的需求。
要滿足需求需要滿足以下三點:
1> 列舉時,給uvc_gadet driver 分配輸入端點時,分配2端點,但是在dwc_otg_driver 使得給uvc_gadget_driver分配的2 in 對應於3 in。
2> 應用層通過系統呼叫往相應2端點寫資料流時實際在驅動中要對3端點寫資料流。
3> usb host 發起資料傳輸的時候,將對端點2的in操作對映到對端點3的in操作。
1,針對上述第一點,在uvc_gadget_driver通過usb_ep_autoconfig獲取端點號時,將 structgadget 中的ep list的ep2in對應於 dwc_otg_driver的輸入端點表中的端點位址為3的端點即可。修改top_dir/drivers/usb/dwc_otg_driver_310/dwc_otg_pcd_linux.c中的gadget_add_eps函式如下圖所示:
2,針對上述第二點, alstralive應用的 transmission模組往usb device端點寫資料的流程如圖1(以uvc video為例):
圖1圖1中,video->encode完成往usb_request.buff中填充資料的過程。它的賦值實現流程如圖2;通過video->encode往usb_request.buff中填充資料之後,通過usb_ep_queue往相應端點上提交此usb_request,在usb host 發起傳輸指令之後會將相應端點的usb_request.buff中內容傳送出去。video->encode的賦值實現流程如圖3。
圖2圖2中,uvc_video_alloc_request完成usb_request的申請,然後對video->encode賦值,使得其實例化。
圖3圖3中對ep->ops->queue進行賦值,使得其實例化。它的具體實現在top_dir/drivers/usb/dwc_otg_driver_310/dwc_otg_pcd_linux.c的dwc_otg_pcd_ep_ops.queue;主要是將usb_request.buff進行dma對映然後將對映出的實體地址賦值給dwc_otg device相應端點的暫存器。在將此實體地址賦值給dwc_otg device相應端點暫存器之前通過get_ep_from_handle找到dwc_otg_driver中相應的端點進行操作。get_ep_from_handle實現如圖4
圖4圖4中handle為uvc_gadgetdriver傳遞過來的usb_ep。由此函式可知,只需將uvc_gadget driver傳遞過來的2端點對映到pcd->in_ep[1].priv即可。 pec->in_ep[2]為dwc_otg_driver的 第2個輸入端點,端點位址為3。
這種對映方式是在usb 列舉過程中,usb host發起設定介面的請求中來完成的。具體函式是dwc_otg_pcd_ep_ops.enable=dwc_otg_pcd_ep_enable,具體修改如圖5所示。
圖5通過以上修改可以滿足第二點。
3,針對第三點,因為usbhost發起資料傳輸時,先傳送的是令牌包,在令牌包中包含了端點位址,因為在usb列舉過程中已經告知usb host往2 in操作,這些資訊在令牌包中,而且由usb otg控制器來解析此包,然後向dma發起請求向相應端點的dma位址中去取資料,通過資料報傳送給usb host。從驅動的角度無法在控制器之前知道usb host操作的是2埠,所以第三點無法滿足。
統計思想隨筆 隨機變數(R V )
隨機變數 random variable 表示隨機試驗各種結果的實值單值函式。f a f a xi f a 其中 a a in omega a r xi in mathbb r.數學上說,隨機變數是乙個對映,將乙個事件域 omega 轉化成實數空間r mathbb r。因此,那些只可意會不可言傳的世...
11 08隊內胡策
總結就是t3想錯直接翻車233.第二題給你兩個日期,問這兩個日期差了多少毫秒。兩行,每行乙個日期,日期格式保證為 yyyy mm dd hh mm ss這種形式。第二個日期時間一定比第乙個日期時間要大兩個日期的年份一定都是 21 世紀的年份。一行乙個整數代表毫秒數。2000 01 01 00 00 ...
P1108 低價購買
原題鏈結 d i 是以 i 這個位置結束的最長下降子串行的長度 第一問就是求個最長下降子串行 第二問 記錄以 i 這個位置結束 長度為d i 的下降子串行的方案總數 d i d j 1 1 j i 的 j 的方案數相加 但是當兩個不同的位置上存的數相同且均滿足上式時 就會產生重複 因為位置靠後的數肯...