1.02.2007

code reading..usbfn pdd, mdd.

混亂的Code Reading (& complain...)

使用SourceNavigator..要另外加入:
PUBLIC\COMMON\OAK\INC
PUBLIC\COMMON\OAK\DRIVERS\USBFN\CONTROLLER\MDD


呼叫最多次的就是IssueTransfer..
argument 有:
  • pointer to pddContext
  • Endpoint index
  • pointer to Transfer
controller的endpinter index register 用一個bit 代表direction,所以不能直接使用software 和usb spec上的endpoint index,要適當的轉換成 register 用的index。

structure : Transfer 內的dwFlag是 transfer direction ? 另外有pddContext 中,每一個Endpoint有property : Dir,也是代表direction ..

InitEndpoint

argument 雖然很多,但是有用到的只有
  • pointer to pddContext
  • Endpoint index
  • pointer to Endpoint Descriptor
設定內部Endpoint data structure 的Dir(ection)。
設定MAX_PACKETSIZE。
呼叫ConfigEndpoint( )
查configuEndpoint只有這裡使用,why implement this funciton in another object ?
整個code也沒有模組化得很好呀。不像是為了模組化所以將hardware(?)相關的部份分離出去..
設計方式很"奇妙"(em...),表面上是要將 interface,hardware,chip register 區分得很好。
但是,使用上卻又...
例如:將chip register operation 宣告在hardware 的class中的private part。
但是因為hardware class是一個static class,所以所有funciton 都可以經由class name直接呼叫。
連private part的function 也不例外...
既然如此,register operation 部份就獨立就好了,和必要在hardware class 中 ?
除非.. register class有要用到hardware class的property ....

加入MDD進入trace的話,變得好複雜..

原來每個Endpoint在MDD中是用一個Pipe來implement。

沒有留言: