HostContainer -- 內部保有 一個 SDHost[] (以HostContainerClass 處理),
利用 InserSDHost( )加入到 Arrary中。
HostContainer 是一個Singleton pattern
SDHost 內有一個 *SDSlot[]
以上都在sdbus.cppSDSlot 內有一個 SDDevice[]
SDSlot[] 的array size是在 SDHost 生成時指定的 (dwNumSlot)。
但是 SDHost[] 是用 InserSDHost( ) 動態加入。
是在 HostContainer 的 static function : SDHCDAllocateContext_X( ) 中生成的,dwNumSlot 是 argument。
SDHCDAllocContext_X( )是由 另一個 driver : HSMMC 透過 function pointer 呼叫。
呼叫時,dwNumSlot 是從 registry key 讀出來的。 -- 是猜出來的。
Slot在處理 CardInsert 時,才會 生成 SDDevice,依照 inser card 的 function number 來決定生成多少 device.
SDHostContainer -- 內含 SDHost
SDHost -- 內含 SDSlot
SDSlot -- 內含 SDDevice
SDHostContainer 內含 function-pointer array, 指向 HSMMC
SDHostContainer 內含 static function array,expose (called by) HSMMC
SDSlot 和 SDDevice 可以送出 Command 給 SD, ( 因為他們都有繼承 SDBusRequest)
但是 SDSlot 只操作 SDRequestQueue,
SDDevice 實際生成 SDRequestQueue,然後呼叫
m_sdSlot.QueueBusRequest(pNewRequest);呼叫 slot 的 queue operation , 將 request 加入到 request queue 中
SDWorkItem 是一個 postevent, thread handle event 的 class。
如其名,是實際工作的 class,生成會後launch 一個 working thread,和一個event queue 。
可以藉由 PostEvent( ) 通知該 Thread。
可以視為獨立於 CE 系統之外的 event-signal 系統但是很白痴的會call SlotStatusChangeProcessing( )。
所以要利用這個WorkItem機制,要繼承這個class,然後實做 SlotStatusChangeProcessing( )
沒有留言:
張貼留言